PageSourceSearch

https://vidow.io/build/assets/Funnel-tfRXTSma.js

js vidow.io collected 2026-09-24 12:50:19 UTC 7,340 bytes, 1 lines download raw bytes

1import{d as $,g as c,j as C,o as n,w as u,b as a,e as s,k as F,a as t,t as l,c as p,F as _,l as x}from"./app-RsKea8o5.js";import{_ as d,c as f,h as N,a as P}from"./StatsCard.vue_vue_type_script_setup_true_lang-D2AKQq2w.js";import{_ as D}from"./BreakdownDonut.vue_vue_type_script_setup_true_lang-DkFiX7m3.js";import{_ as R}from"./ExtensionShell.vue_vue_type_script_setup_true_lang-B5DQ6pe5.js";import{_ as S}from"./AdminBarChart.vue_vue_type_script_setup_true_lang-BknjHDMt.js";import{_ as g}from"./Card.vue_vue_type_script_setup_true_lang-KRydYIaJ.js";import{f as V,b as m,a as j,c as A}from"./useFormatters-9kQ9hfDK.js";import"./Skeleton.vue_vue_type_script_setup_true_lang-oZxeCen6.js";import"./utils-Cq45lf33.js";import"./SelectValue.vue_vue_type_script_setup_true_lang-C-9s-em5.js";import"./RovingFocusGroup-D3QouwLK.js";import"./index-BmOTFpO0.js";import"./useForwardExpose-DXi0eF_E.js";import"./Teleport-CpnQCY9y.js";import"./HugeiconsIcon.vue_vue_type_script_setup_true_lang-D36_Is65.js";import"./ArrowDown01Icon-DJ3rel_9.js";import"./index-B_siYGUE.js";import"./ArrowUp01Icon-BskfEfJa.js";import"./Tick01Icon-CMS0_aRT.js";import"./clamp-BstbYvQo.js";import"./DropdownMenuTrigger.vue_vue_type_script_setup_true_lang-DqLmnnaC.js";import"./ohash.D__AXeF1-C-E83dC9.js";import"./useFormControl-BRvJDsT8.js";import"./VisuallyHidden-Gnp4jwIA.js";import"./billingFormat-BEg3RvRQ.js";import"./ArrowRight01Icon-D04wg_Dq.js";import"./ArrowLeft01Icon-Dyic07IP.js";import"./AdminLayout.vue_vue_type_script_setup_true_lang-CoPJOjTU.js";import"./ImpersonationBanner.vue_vue_type_script_setup_true_lang-DGaRVNpY.js";import"./AppLogoIcon.vue_vue_type_script_setup_true_lang-Cgx8zpHc.js";import"./Cancel01Icon-DGojgfc9.js";import"./TooltipTrigger.vue_vue_type_script_setup_true_lang-J3bpJMlW.js";import"./index-DklSXLq-.js";import"./index-Z30Umu-o.js";import"./DropdownMenuSeparator.vue_vue_type_script_setup_true_lang-CrVuA_Y9.js";import"./useAnalytics-Bxkp3130.js";import"./useLocaleSwitcher-DjLXDJUg.js";import"./Settings01Icon-FajSHvbV.js";import"./LogoutSquare02Icon-z0F7OlYo.js";import"./UserMultipleIcon-BNN4OGHz.js";import"./CreditCardIcon-BTAImhZv.js";import"./Invoice01Icon-DsbBFA6t.js";import"./Shield01Icon-CKvIlKQn.js";import"./Radar01Icon-DMirgx-6.js";import"./BarChartIcon-D1jEOYPh.js";import"./PuzzleIcon-UfmhaZxq.js";import"./Video01Icon-DHVrYei2.js";import"./PlayIcon-CeODAqTp.js";import"./PlayIcon-eNaA-8sj.js";import"./Flag01Icon-BRr2gYMR.js";import"./File02Icon--_N_-4F2.js";import"./WebhookIcon-DJ7KtDbN.js";import"./Sonner.vue_vue_type_style_index_0_lang-VAYwp5ry.js";import"./useFlashToasts-50RPs8wm.js";import"./AdminPageHeader.vue_vue_type_script_setup_true_lang-CJHOoPWh.js";import"./lodash-D-iDC_mF.js";import"./AnalyticsTabs.vue_vue_type_script_setup_true_lang-DBW1MWoE.js";import"./TabsTrigger.vue_vue_type_script_setup_true_lang-CEuQ2lZj.js";import"./RovingFocusItem-OppQ6H3F.js";import"./PopoverTrigger.vue_vue_type_script_setup_true_lang-v0dR04yy.js";import"./adminAnalyticsTabs-D2TQwJkK.js";const z={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4"},E={class:"mt-4"},O={class:"grid grid-cols-1 gap-4 lg:grid-cols-3"},W={class:"mb-4 text-xs text-muted-foreground"},q={class:"grid grid-cols-2 gap-3 sm:grid-cols-4"},G={class:"text-xs text-muted-foreground"},I={class:"text-2xl font-bold"},J={class:"text-xs tabular-nums text-muted-foreground"},K={key:0,class:"mt-4 space-y-2 text-sm"},M={class:"min-w-0 truncate"},Q={class:"flex items-center gap-3"},U={class:"text-xs text-muted-foreground"},X={class:"font-semibold tabular-nums"},Y={key:1,class:"mt-4 text-sm text-muted-foreground"},ae=$({__name:"Funnel",props:{analyticsFilters:{},extensionAnalytics:{}},setup(y){const b=y,r=c(()=>b.extensionAnalytics.funnel),v=c(()=>r.value.pressureTrend.points),w=c(()=>v.value.map(i=>i.date)),h=["hsl(var(--chart-1))","hsl(var(--chart-2))","hsl(var(--chart-3))","hsl(var(--chart-4))","hsl(var(--chart-5))"];function k(i){return i.map((e,o)=>({key:e.key,label:e.label,currency:"",amount:e.count,count:e.count,color:h[o%h.length]}))}const H=c(()=>k(r.value.byType));function B(i){return i===null?"—":j(i)}const L=c(()=>r.value.recordingSince===null?"No limit events recorded yet":`Recording since ${V(r.value.recordingSince,{dateOnly:!0})}`);function T(i){return i.length===0?"—":[...i].sort((e,o)=>o.amount-e.amount).map(e=>A(e.amount,e.currency)).join(" · ")}return(i,e)=>(n(),C(R,{filters:i.analyticsFilters,tab:"Limits & Funnel"},{default:u(()=>[a(s(F),{data:"extensionAnalytics"},{fallback:u(()=>
1[a(P,{cards:4,charts:2})]),default:u(()=>[t("div",z,[a(d,{title:"Download Limit Hits",value:s(m)(r.value.pressure.downloadHits.count),trend:s(f)(r.value.pressure.downloadHits.comparison)},null,8,["value","trend"]),a(d,{title:"Cast Limit Hits",value:s(m)(r.value.pressure.castHits.count),trend:s(f)(r.value.pressure.castHits.comparison)},null,8,["value","trend"]),a(d,{title:"Save Limit Hits",value:s(m)(r.value.pressure.saveHits.count),trend:s(f)(r.value.pressure.saveHits.comparison)},null,8,["value","trend"]),a(d,{title:"Paywall Views",value:s(m)(r.value.paywallViews.count),description:"Blocked-state page renders",trend:s(f)(r.value.paywallViews.comparison)},null,8,["value","trend"])]),a(s(g),{class:"p-6"},{default:u(()=>[e[0]||(e[0]=t("div",{class:"min-w-0"},[t("h3",{class:"text-sm font-medium text-muted-foreground"}," Limit pressure over time "),t("p",{class:"mt-1 text-xs text-muted-foreground"}," All recorded limit hits per period. ")],-1)),t("div",E,[a(S,{data:v.value,"x-labels":w.value,"value-key":"hits",label:"Limit hits",color:"hsl(var(--chart-4))","value-format":s(m)},null,8,["data","x-labels","value-format"])])]),_:1}),t("div",O,[a(D,{title:"Hits by limit type",subtitle:"Which limits users are running into.",unit:"hits","value-type":"count",rows:H.value,"empty-text":"No limit hits in this range."},null,8,["rows"]),a(s(g),{class:"p-6 lg:col-span-2"},{default:u(()=>[e[1]||(e[1]=t("h3",{class:"text-sm font-medium text-muted-foreground"}," Download limit → purchase funnel ",-1)),t("p",W," Distinct identities per step in the window. "+l(L.value)+". ",1),t("div",q,[(n(!0),p(_,null,x(r.value.steps,o=>(n(),p("div",{key:o.key},[t("p",G,l(o.label),1),t("p",I,l(s(m)(o.count)),1),t("p",J,l(B(o.pctOfPrevious)),1)]))),128))])]),_:1})]),a(s(g),{class:"p-6"},{default:u(()=>[e[2]||(e[2]=t("div",{class:"flex flex-wrap items-start justify-between gap-4"},[t("div",{class:"min-w-0"},[t("h3",{class:"text-sm font-medium text-muted-foreground"}," Revenue by trigger "),t("p",{class:"mt-1 text-xs text-muted-foreground"}," Purchases grouped by what pushed the buyer to checkout. ")]),t("span",{class:"shrink-0 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-700 dark:bg-amber-950 dark:text-amber-400"},"Trigger captured from live checkouts only — historical imports have no trigger")],-1)),r.value.revenueByTrigger.length>0?(n(),p("ul",K,[(n(!0),p(_,null,x(r.value.revenueByTrigger,o=>(n(),p("li",{key:o.trigger,class:"flex flex-wrap items-center justify-between gap-2 border-b py-1.5 last:border-0"},[t("span",M,l(s(N)(o.trigger)),1),t("span",Q,[t("span",U,l(s(m)(o.purchases))+" purchases",1),t("span",X,l(T(o.revenueByCurrency)),1)])]))),128))])):(n(),p("p",Y," No attributed purchases in this range. "))]),_:1})]),_:1})]),_:1},8,["filters"]))}});export{ae 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.