1import{_ as V}from"./QGNy9sQ5.js";import{_ as L,r as v,f as w,w as r,a as t,d as c,b as o,o as l,c as d,t as n,j as f,F as p,i as b,g as R,A as E,h as P}from"./Ck03Lu83.js";const F={id:"attribution-analytics-info"},H={class:"sans-serif mt-6 breadcrumb-text"},O={key:0,class:"loading-container"},B={key:2},G={class:"date-range-section"},z={class:"overview-section"},I={class:"section-title"},W={class:"stats-grid"},q={class:"stat-value"},j={class:"stat-value"},Q={class:"stat-value"},J={class:"stat-meta"},K={class:"stat-value warning-text"},X={key:0,class:"breakdown-section"},Y={class:"breakdown-grid"},Z={class:"breakdown-type"},x={class:"breakdown-count"},tt={class:"funnel-section"},st={class:"funnel-visualization"},et={class:"funnel-bar-container"},at={class:"funnel-details"},it={class:"funnel-stage-name"},nt={class:"funnel-metrics"},rt={class:"funnel-count"},ot={class:"funnel-percentage"},lt={key:0,class:"funnel-meta"},dt={class:"meta-stat"},ut={class:"meta-value"},ct={class:"sources-section"},ht={class:"click-ids-section"},mt={class:"click-ids-grid"},vt={class:"click-id-count"},ft={class:"click-id-count"},_t={class:"click-id-count"},gt={class:"sources-table-section"},pt={class:"source-name"},bt={class:"text-right"},yt={class:"text-right"},kt={class:"text-right"},wt={class:"text-right"},Ct={class:"campaigns-table-section"},Nt={class:"campaign-name"},At={class:"source-name"},St={class:"text-right"},Rt={class:"text-right"},Dt={class:"text-right"},Tt={class:"text-right"},$t={class:"mediums-table-section"},Ut={class:"medium-name"},Mt={class:"text-right"},Vt={class:"text-right"},Lt={class:"text-right"},Et={class:"text-right"},Pt={class:"health-section"},Ft={class:"health-score-card"},Ht={class:"health-score-value"},Ot={class:"health-score-status"},Bt={class:"health-metrics-grid"},Gt={class:"health-metric-rate"},zt={class:"health-metric-details"},It={class:"health-metric-status"},Wt={name:"AttributionAnalytics",data(){return{loading:!0,refreshing:!1,error:null,selectedRange:"last_30_days",dateRangeOptions:[{title:"Last 7 Days",value:"last_7_days"},{title:"Last 30 Days",value:"last_30_days"},{title:"Last 90 Days",value:"last_90_days"}],overview:{},funnel:{},sources:{},health:{}}},head(){return{title:"Attribution Analytics - 750 Words Admin",meta:[{name:"description",content:"UTM attribution analytics and conversion funnel dashboard"}]}},computed:{dateRangeLabel(){const i=this.dateRangeOptions.find(s=>s.value===this.selectedRange);return i?`(${i.title})`:""},getAttributionRateClass(){var s;const i=((s=this.overview.metrics)==null?void 0:s.attribution_completion_rate)||0;return i>=50?"stat-card-success":i>=20?"stat-card-warning":"stat-card-error"},funnelStages(){return this.funnel.funnel?[{key:"visits",name:"1. Visits",...this.funnel.funnel.visits},{key:"signups",name:"2. Signups",...this.funnel.funnel.signups},{key:"email_confirmed",name:"3. Email Confirmed",...this.funnel.funnel.email_confirmed},{key:"first_750_words",name:"4. First 750 Words",...this.funnel.funnel.first_750_words},{key:"purchases",name:"5. Purchases",...this.funnel.funnel.purchases}]:[]}},async mounted(){await this.loadData()},methods:{async loadData(){var i,s;try{this.loading=!0,this.error=null;const e=this.getDateParams(),_=P(),g={Authorization:`Bearer ${(i=this.$auth)==null?void 0:i.token}`,"Content-Type":"application/json"},[C,N,k,A]=await Promise.all([$fetch("/api/v1/admin/attribution_analytics/overview",{method:"GET",baseURL:_.public.railsApiUrl||"http://localhost:8080",headers:g,params:e}),$fetch("/api/v1/admin/attribution_analytics/funnel",{method:"GET",baseURL:_.public.railsApiUrl||"http://localhost:8080",headers:g,params:e}),$fetch("/api/v1/admin/attribution_analytics/sources",{method:"GET",baseURL:_.public.railsApiUrl||"http://localhost:8080",headers:g,params:e}),$fetch("/api/v1/admin/attribution_analytics/health",{method:"GET",baseURL:_.public.railsApiUrl||"http://localhost:8080",headers:g,params:e})]);this.overview=C,this.funnel=N,this.sources=k,this.health=A}catch(e){console.error("Error loading attribution analytics:",e),this.error="Failed to load attribution analytics. Please try again.",e.status===401&&(await((s=this.$auth)==null?void 0:s.logout()),await this.$router.push("/login"))}finally{this.loading=!1}},async refreshData(){this.refreshing=!0,await this.loadData(),this.refreshing=!1},getDateParams(){const i=new Date;let s=new Date;switch(this.selectedRange){case"last_7_days":s.setDate(i.getDate()-7);break;case"last_30_days":s.setDate(i.getDate()-30);break;case"last_90_days":s.setDate(i.getDate()-90);break}return{start_date:s.toISOString().split("T")[0],end_date:i.toISOString().split("T")[0]}}
1,formatNumber(i){return(i==null?void 0:i.toLocaleString())||"0"},formatAttributionType(i){return{visit:"Visits",signup:"Signups",login:"Logins",email_confirmed:"Email Confirmed",completed_first_day:"First 750 Words",membership_purchase:"Membership Purchases",course_purchase:"Course Purchases"}[i]||i},formatHealthStatus(i){return{healthy:"Healthy",warning:"Warning",critical:"Critical"}[i]||i},formatMetricName(i){return{orphaned_attributions:"Orphaned Attributions",signup_attribution:"Signup Attribution",gtm_event_tracking:"GTM Event Tracking",data_quality:"Data Quality"}[i]||i},formatMetricDetails(i,s){return i==="orphaned_attributions"?`${this.formatNumber(s.count)} of ${this.formatNumber(s.total_visits)} visits`:i==="signup_attribution"?`${this.formatNumber(s.signups_with_attribution)} of ${this.formatNumber(s.total_signups)} signups`:i==="gtm_event_tracking"?`${this.formatNumber(s.tracked)} of ${this.formatNumber(s.total_eligible)} eligible users`:i==="data_quality"?`${this.formatNumber(s.with_utm_data)} of ${this.formatNumber(s.total_attributions)} attributions`:""},getFunnelBarClass(i){return i>=50?"funnel-bar-success":i>=20?"funnel-bar-warning":"funnel-bar-error"},getConversionClass(i){return i>=10?"success-text":i>=3?"warning-text":"error-text"},getHealthClass(i){return i>=80?"health-card-success":i>=50?"health-card-warning":"health-card-error"},getHealthMetricClass(i){return`health-metric-${i}`},getStatusColor(i){return i==="healthy"?"success":i==="warning"?"warning":"error"},getStatusIcon(i){return i==="healthy"?"mdi-check-circle":i==="warning"?"mdi-alert-circle":"mdi-close-circle"}}},qt=Object.assign(Wt,{setup(i){return(s,e)=>{const _=V,g=v("v-progress-circular"),C=v("v-alert"),N=v("v-select"),k=v("v-icon"),A=v("v-btn"),y=v("v-card-title"),h=v("v-card-text"),m=v("v-card"),S=v("v-table"),M=v("v-container");return l(),w(M,{id:"attribution-analytics-container"},{default:r(()=>{var D,T,$;return[t("div",F,[t("div",H,[e[2]||(e[2]=c(" ð² ",-1)),o(_,{to:"/admin",class:"admin-secret-link"},{default:r(()=>[...e[1]||(e[1]=[c("ToP sEcReT",-1)])]),_:1})]),e[32]||(e[32]=t("h1",{class:"page-title mt-4"}," ð UTM Attribution Funnel ",-1)),s.loading?(l(),d("div",O,[o(g,{indeterminate:"",color:"primary",size:"48"}),e[3]||(e[3]=t("p",{class:"loading-text"},"Loading attribution data...",-1))])):s.error?(l(),w(C,{key:1,type:"error",variant:"tonal",class:"my-4"},{default:r(()=>[c(n(s.error),1)]),_:1})):(l(),d("div",B,[t("div",G,[o(N,{modelValue:s.selectedRange,"onUpdate:modelValue":[e[0]||(e[0]=a=>s.selectedRange=a),s.loadData],items:s.dateRangeOptions,label:"Date Range",variant:"outlined",color:"primary",class:"date-range-selector"},null,8,["modelValue","items","onUpdate:modelValue"]),o(A,{onClick:s.refreshData,color:"primary",variant:"outlined",loading:s.refreshing,class:"refresh-button"},{default:r(()=>[o(k,{left:""},{default:r(()=>[...e[4]||(e[4]=[c("mdi-refresh",-1)])]),_:1}),e[5]||(e[5]=c(" Refresh ",-1))]),_:1},8,["onClick","loading"])]),t("div",z,[t("h2",I,"Overview "+n(s.dateRangeLabel),1),t("div",W,[o(m,{class:"stat-card",variant:"elevated"},{default:r(()=>[o(y,{class:"stat-title"},{default:r(()=>[...e[6]||(e[6]=[c("Total Attributions",-1)])]),_:1}),o(h,{class:"stat-content"},{default:r(()=>{var a;return[t("div",q,n(s.formatNumber((a=s.overview.metrics)==null?void 0:a.total_attributions)),1),e[7]||(e[7]=t("div",{class:"stat-meta"},"All tracked events",-1))]}),_:1})]),_:1}),o(m,{class:"stat-card",variant:"elevated"},{default:r(()=>[o(y,{class:"stat-title"},{default:r(()=>[...e[8]||(e[8]=[c("Unique Users",-1)])]),_:1}),o(h,{class:"stat-content"},{default:r(()=>{var a;return[t("div",j,n(s.formatNumber((a=s.overview.metrics)==null?void 0:a.unique_users)),1),e[9]||(e[9]=t("div",{class:"stat-meta"},"With attribution data",-1))]}),_:1})]),_:1}),o(m,{class:f(["stat-card",s.getAttributionRateClass]),variant:"elevated"},{default:r(()=>[o(y,{class:"stat-title"},{default:r(()=>[...e[10]||(e[10]=[c("Attribution Capture",-1)])]),_:1}),o(h,{class:"stat-content"},{default:r(()=>{var a,u,U;return[t("div",Q,n((a=s.overview.metrics)==null?void 0:a.attribution_completion_rate)+"%",1),t("div",J,n(s.formatNumber((u=s.overview.metrics)==null?void 0:u.signups_with_attribution))+" of "+n(s.formatNumber((U=s.overview.metrics)==null?void 0:U.total_signups))+" signups ",1)]}),_:1})]),_:1},8,["class"]),o(m,{class:"stat-card",variant:"elevated"},{default:r(()=>[o(y,{class:"stat-title"},{default:r(()=>[...e[11]||(e[11]=[c("Orphaned Visits",-1)])]),_:1}),o(h,{class:"stat-content"},{default:r(()=>{var a;return[t("div",K,n(s.formatNumber((a=s.overview.metrics)==null?void 0:a.orphaned_attributions)),1),e[12]||(e[12]=t("div",{class:"stat-meta"},"Not yet linked to users",-1))]}),_:1})]),_:1})])]),(D=s.overview.metrics)!=null&&D.attribution_by_type?(l(),d("div",X,[e[13]||(e[13]=t("h3",{class:"subsection-title"},"Attribution Events Breakdown",-1)),t("div",Y,[(l(!0),d(p,null,b(s.overview.metrics.attribution_by_type,(a,u)=>(l(),w(m,{key:u,class:"breakdown-card",variant:"elevated"},{default:r(()=>[o(h,{class:"breakdown-content"},{default:r(()=>[t("div",Z,n(s.formatAttributionType(u)),1),t("div",x,n(s.formatNumber(a)),1)]),_:2},1024)]),_:2},1024))),128))])])):R("",!0),t("div",tt,[e[15]||(e[15]=t("h2",{class:"section-title"},"Conversion Funnel",-1)),t("div",st,[(l(!0),d(p,null,b(s.funnelStages,(a,u)=>(l(),d("div",{key:a.key,class:"funnel-stage"},[t("div",et,[t("div",{class:f(["funnel-bar",s.getFunnelBarClass(a.from_previous)]),style:E({width:a.percentage+"%"})},null,6)]),t("div",at,[t("div",it,n(a.name),1),t("div",nt,[t("span",rt,n(s.formatNumber(a.count)),1),t("span",ot,"("+n(a.percentage)+"%)",1),u>0?(l(),d("span",{key:0,class:f(["funnel-conversion",s.getConversionClass(a.from_previous)])},n(a.from_previous)+"% from previous ",3)):R("",!0)])])]))),128))]),s.funnel.avg_time_to_purchase_days?(l(),d("div",lt,[t("div",dt,[e[14]||(e[14]=t("span",{class:"meta-label"},"Avg. Time to Purchase:",-1)),t("span",ut,n(s.funnel.avg_time_to_purchase_days)+" days",1)])])):R("",!0)]),t("div",ct,[e[29]||(e[29]=t("h2",{class:"section-title"},"Attribution Sources",-1)),t("div",ht,[e[22]||(e[22]=t("h3",{class:"subsection-title"},"Ad Platform Distribution",-1)),t("div",mt,[o(m,{class:"click-id-card",variant:"elevated"},{default:r(()=>[o(h,null,{default:r(()=>{var a;return[e[16]||(e[16]=t("div",{class:"click-id-platform"},"Google Ads",-1)),t("div",vt,n(s.formatNumber((a=s.sources.click_ids)==null?void 0:a.google_ads)),1),e[17]||(e[17]=t("div",{class:"click-id-label"},"gclid",-1))]}),_:1})]),_:1}),o(m,{class:"click-id-card",variant:"elevated"},{default:r(()=>[o(h,null,{default:r(()=>{var a;return[e[18]||(e[18]=t("div",{class:"click-id-platform"},"Facebook Ads",-1)),t("div",ft,n(s.formatNumber((a=s.sources.click_ids)==null?void 0:a.facebook_ads)),1),e[19]||(e[19]=t("div",{class:"click-id-label"},"fbclid",-1))]}),_:1})]),_:1}),o(m,{class:"click-id-card",variant:"elevated"},{default:r(()=>[o(h,null,{default:r(()=>{var a;return[e[20]||(e[20]=t("div",{class:"click-id-platform"},"Microsoft Ads",-1)),t("div",_t,n(s.formatNumber((a=s.sources.click_ids)==null?void 0:a.microsoft_ads)),1),e[21]||(e[21]=t("div",{class:"click-id-label"},"msclkid",-1))]}),_:1})]),_:1})])]),t("div",gt,[e[24]||(e[24]=t("h3",{class:"subsection-title"},"Top UTM Sources",-1)),o(S,{class:"sources-table"},{default:r(()=>[e[23]||(e[23]=t("thead",null,[t("tr",null,[t("th",null,"Source"),t("th",{class:"text-right"},"Visits"),t("th",{class:"text-right"},"Signups"),t("th",{class:"text-right"},"Conversions"),t("th",{class:"text-right"},"Conv Rate")])],-1)),t("tbody",null,[(l(!0),d(p,null,b(s.sources.top_sources,a=>(l(),d("tr",{key:a.source},[t("td",pt,n(a.source),1),t("td",bt,n(s.formatNumber(a.visits)),1),t("td",yt,n(s.formatNumber(a.signups)),1),t("td",kt,n(s.formatNumber(a.conversions)),1),t("td",wt,[t("span",{class:f(s.getConversionClass(a.conversion_rate))},n(a.conversion_rate)+"% ",3)])]))),128))])]),_:1})]),t("div",Ct,[e[26]||(e[26]=t("h3",{class:"subsection-title"},"Top UTM Campaigns",-1)),o(S,{class:"campaigns-table"},{default:r(()=>[e[25]||(e[25]=t("thead",null,[t("tr",null,[t("th",null,"Campaign"),t("th",null,"Source"),t("th",{class:"text-right"},"Visits"),t("th",{class:"text-right"},"Signups"),t("th",{class:"text-right"},"Conversions"),t("th",{class:"text-right"},"Conv Rate")])],-1)),t("tbody",null,[(l(!0),d(p,null,b(s.sources.top_campaigns,a=>(l(),d("tr",{key:a.campaign},[t("td",Nt,n(a.campaign),1),t("td",At,n(a.source),1),t("td",St,n(s.formatNumber(a.visits)),1),t("td",Rt,n(s.formatNumber(a.signups)),1),t("td",Dt,n(s.formatNumber(a.conversions)),1),t("td",Tt,[t("span",{class:f(s.getConversionClass(a.conversion_rate))},n(a.conversion_rate)+"% ",3)])]))),128))])]),_:1})]),t("div",$t,[e[28]||(e[28]=t("h3",{class:"subsection-title"},"Top UTM Mediums",-1)),o(S,{class:"mediums-table"},{default:r(()=>
1[e[27]||(e[27]=t("thead",null,[t("tr",null,[t("th",null,"Medium"),t("th",{class:"text-right"},"Visits"),t("th",{class:"text-right"},"Signups"),t("th",{class:"text-right"},"Conversions"),t("th",{class:"text-right"},"Conv Rate")])],-1)),t("tbody",null,[(l(!0),d(p,null,b(s.sources.top_mediums,a=>(l(),d("tr",{key:a.medium},[t("td",Ut,n(a.medium),1),t("td",Mt,n(s.formatNumber(a.visits)),1),t("td",Vt,n(s.formatNumber(a.signups)),1),t("td",Lt,n(s.formatNumber(a.conversions)),1),t("td",Et,[t("span",{class:f(s.getConversionClass(a.conversion_rate))},n(a.conversion_rate)+"% ",3)])]))),128))])]),_:1})])]),t("div",Pt,[e[31]||(e[31]=t("h2",{class:"section-title"},"System Health",-1)),t("div",Ft,[o(m,{variant:"elevated",class:f(s.getHealthClass((T=s.health.health)==null?void 0:T.overall_score))},{default:r(()=>[o(h,null,{default:r(()=>{var a,u;return[e[30]||(e[30]=t("div",{class:"health-score-title"},"Overall Health Score",-1)),t("div",Ht,n((a=s.health.health)==null?void 0:a.overall_score)+"%",1),t("div",Ot,n(s.formatHealthStatus((u=s.health.health)==null?void 0:u.status)),1)]}),_:1})]),_:1},8,["class"])]),t("div",Bt,[(l(!0),d(p,null,b(($=s.health.health)==null?void 0:$.metrics,(a,u)=>(l(),w(m,{key:u,class:f(["health-metric-card",s.getHealthMetricClass(a.status)]),variant:"elevated"},{default:r(()=>[o(y,{class:"health-metric-title"},{default:r(()=>[c(n(s.formatMetricName(u)),1)]),_:2},1024),o(h,{class:"health-metric-content"},{default:r(()=>[t("div",Gt,n(a.rate)+"%",1),t("div",zt,n(s.formatMetricDetails(u,a)),1),t("div",It,[o(k,{color:s.getStatusColor(a.status)},{default:r(()=>[c(n(s.getStatusIcon(a.status)),1)]),_:2},1032,["color"]),c(" "+n(s.formatHealthStatus(a.status)),1)])]),_:2},1024)]),_:2},1032,["class"]))),128))])])]))])]}),_:1})}}}),Jt=L(qt,[["__scopeId","data-v-34f7a646"]]);export{Jt 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.