1import{_ as F}from"./Cx5C1NCG.js";import{Chart as O}from"./eE5P6S0m.js";import{u as N}from"./B3dXjXSM.js";import{_ as R,A as M,r as u,e as y,w as o,b as d,a,t as n,d as m,o as _,f as k,c as p,F as T,h as U,n as f}from"./D39WfGqu.js";const L={name:"EmailCampaignMetricsCard",props:{campaign:{type:Object,required:!0},organicBaseline:{type:Object,default:null}},data(){return{campaignUsers:[],loadingUsers:!1,usersError:null,usersFetched:!1,signupChartInstance:null,userTableHeaders:[{title:"User",key:"writer_handle",sortable:!0},{title:"V1 Status",key:"v1_status",sortable:!0},{title:"Signup Date",key:"signup_date",sortable:!0},{title:"Days Written",key:"days_written",sortable:!0},{title:"Days Completed",key:"days_completed",sortable:!0},{title:"Trial Started",key:"trial_start_date",sortable:!0},{title:"Membership",key:"membership_type",sortable:!0},{title:"First Payment",key:"first_payment_date",sortable:!0},{title:"Cancelled",key:"cancelled_date",sortable:!0},{title:"Ended",key:"membership_ended_date",sortable:!0},{title:"Membership Revenue",key:"membership_paid",sortable:!0},{title:"Other Revenue",key:"other_paid",sortable:!0},{title:"Total Revenue",key:"total_paid",sortable:!0}]}},computed:{maturityClass(){return`maturity-${this.campaign.maturity_stage}`},maturityColor(){return{seedling:"success",sprouting:"info",growing:"warning",mature:"primary"}[this.campaign.maturity_stage]||"grey"},confidenceColor(){return{high:"success",medium:"warning",low:"error"}[this.campaign.projection_confidence]||"default"},trendColor(){return{excellent:"success",good:"info",neutral:"warning",poor:"error",insufficient_data:"grey"}[this.campaign.performance_trend]||"default"},trendIcon(){return{excellent:"mdi-trending-up",good:"mdi-arrow-up",neutral:"mdi-arrow-right",poor:"mdi-trending-down",insufficient_data:"mdi-help-circle"}[this.campaign.performance_trend]||"mdi-help-circle"},trendLabel(){return{excellent:"Excellent Performance",good:"Good Performance",neutral:"Neutral Performance",poor:"Poor Performance",insufficient_data:"Insufficient Data"}[this.campaign.performance_trend]||"Unknown"},trendDescription(){const i=this.campaign.performance_trend,e=this.campaign.performance_vs_organic_30d,s=this.campaign.performance_vs_organic_90d;return i==="excellent"?`This campaign is significantly outperforming organic users (${s}à at 90d). Strong candidate for scaling.`:i==="good"?`This campaign is outperforming organic users (${e}à at 30d). Continue monitoring for scaling opportunity.`:i==="neutral"?"This campaign is performing similar to organic baseline. Monitor for improvement opportunities.":i==="poor"?"This campaign is underperforming organic baseline. Consider pausing or adjusting campaign strategy.":"Not enough data yet to determine performance trend."},totalTrials(){return this.campaign.trial_starts_30d||0},totalConversions(){return this.campaign.paid_30d||0},membershipRevenue(){return Array.isArray(this.campaignUsers)?this.campaignUsers.reduce((i,e)=>i+(e.membership_paid||0)/100,0):(console.warn("â ï¸ [EmailCampaignMetricsCard] campaignUsers is not an array:",this.campaignUsers),0)},otherRevenue(){return Array.isArray(this.campaignUsers)?this.campaignUsers.reduce((i,e)=>i+(e.other_paid||0)/100,0):0},totalRevenue(){return this.membershipRevenue+this.otherRevenue},dailySignupData(){if(!this.campaign.daily_cohorts||this.campaign.daily_cohorts.length===0)return console.log("â ï¸ [EmailCampaignMetricsCard] No daily_cohorts for:",this.campaign.campaign_token),[];const i=this.campaign.daily_cohorts.slice().sort((e,s)=>new Date(e.cohort_date)-new Date(s.cohort_date));return console.log("ð [EmailCampaignMetricsCard] dailySignupData computed:",{campaign_token:this.campaign.campaign_token,cohorts_count:i.length}),i},signupsByAge(){const i=new Date,e=this.dailySignupData;return{total:e.reduce((s,r)=>s+(r.signups||0),0),sevenPlus:e.filter(s=>Math.floor((i-new Date(s.cohort_date))/864e5)>=7).reduce((s,r)=>s+(r.signups||0),0),thirtyPlus:e.filter(s=>Math.floor((i-new Date(s.cohort_date))/864e5)>=30).reduce((s,r)=>s+(r.signups||0),0),ninetyPlus:e.filter(s=>Math.floor((i-new Date(s.cohort_date))/864e5)>=90).reduce((s,r)=>s+(r.signups||0),0),oneEightyPlus:e.filter(s=>Math.floor((i-new Date(s.cohort_date))/864e5)>=180).reduce((s,r)=>s+(r.signups||0),0),threeSixtyFivePlus:e.filter(s=>Math.floor((i-new Date(s.cohort_date))/864e5)>=365).reduce((s,r)=>s+(r.signups||0),0)}}},methods:{getAlertType(i){return i.includes("ð¨")||i.includes("PAUSE")?"error":i.includes("â ï¸")||i.includes("MON
1ITOR")?"warning":i.includes("â
")||i.includes("SCALE")?"success":(i.includes("â¨")||i.includes("TRENDING WELL"),"info")},getPerformanceClass(i){return i?i>1.2?"performance-excellent":i>=.8?"performance-neutral":"performance-poor":""},formatNumber(i){return!i&&i!==0?"-":i.toLocaleString()},formatPercentage(i){return!i&&i!==0?"-":`${i.toFixed(2)}%`},formatMultiplier(i){return i?`${i.toFixed(2)}Ã`:"-"},formatDate(i){return i?new Date(i).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}):"-"},async fetchCampaignUsers(){this.loadingUsers=!0,this.usersError=null;try{const{apiUrl:i}=N(),e=M(),s=await fetch(`${i}/api/v1/admin/email_marketing/campaign/${this.campaign.campaign_token}/users`,{method:"GET",headers:{Authorization:`Bearer ${e.token}`,"Content-Type":"application/json"}}),r=await s.json();if(s.ok&&r.status==="OK")this.campaignUsers=r.users||[],this.usersFetched=!0;else throw new Error(r.message||"Failed to load campaign users")}catch(i){console.error("Error fetching campaign users:",i),this.usersError=`Failed to load users: ${i.message}`}finally{this.loadingUsers=!1}},handleExpansionPanelOpen(){!this.usersFetched&&!this.loadingUsers&&this.fetchCampaignUsers()},renderSignupChart(){if(!this.$refs.signupChart||this.dailySignupData.length<7)return;this.signupChartInstance&&this.signupChartInstance.destroy();const i=this.$refs.signupChart.getContext("2d"),e=this.dailySignupData.map(r=>new Date(r.cohort_date).toLocaleDateString("en-US",{month:"short",day:"numeric"})),s=this.dailySignupData.map(r=>r.signups||0);this.signupChartInstance=new O(i,{type:"bar",data:{labels:e,datasets:[{label:"Signups",data:s,backgroundColor:"rgba(25, 118, 210, 0.5)",borderColor:"rgba(25, 118, 210, 1)",borderWidth:1}]},options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{callbacks:{title:r=>{const l=r[0].dataIndex,t=this.dailySignupData[l].cohort_date;return new Date(t).toLocaleDateString("en-US",{weekday:"short",year:"numeric",month:"short",day:"numeric"})},label:r=>`Signups: ${r.parsed.y}`}}},scales:{y:{beginAtZero:!0,ticks:{precision:0}}}}})}},created(){console.log("ð§ [EmailCampaignMetricsCard] Component created:",{campaign_token:this.campaign.campaign_token,has_campaign_prop:!!this.campaign,has_organic_baseline:!!this.organicBaseline})},mounted(){var i;console.log("ð§ [EmailCampaignMetricsCard] Component mounted:",{campaign_token:this.campaign.campaign_token,signups:this.campaign.signups,daily_cohorts_length:(i=this.campaign.daily_cohorts)==null?void 0:i.length,campaign_data:this.campaign}),this.$nextTick(()=>{console.log("ð [EmailCampaignMetricsCard] Rendering chart for:",this.campaign.campaign_token),this.renderSignupChart()})},beforeUnmount(){this.signupChartInstance&&this.signupChartInstance.destroy()},errorCaptured(i,e,s){var r;return console.error("â [EmailCampaignMetricsCard] Error captured:",{campaign_token:(r=this.campaign)==null?void 0:r.campaign_token,error:i,info:s,vm:e}),!1}},I={class:"header-content"},j={class:"campaign-title"},z={class:"maturity-emoji"},V={class:"campaign-name"},G={class:"campaign-meta"},W={class:"cohort-month"},H={class:"age"},K={key:0,class:"alerts-section"},q={class:"user-summary"},Z={class:"summary-grid"},J={class:"summary-item"},Q={class:"summary-value"},X={class:"summary-item"},Y={class:"summary-value"},$={class:"summary-item"},aa={class:"summary-value"},ea={class:"summary-item"},sa={class:"summary-value"},ta={class:"summary-item"},na={class:"summary-value"},ia={class:"summary-item"},ra={class:"summary-value"},la={class:"summary-item"},oa={class:"summary-value"},ca={class:"summary-item"},ma={class:"summary-value"},da={class:"summary-item"},_a={class:"summary-value"},ua={class:"summary-item"},ga={class:"summary-value"},pa={class:"summary-item"},fa={class:"summary-value"},va={class:"summary-item"},ha={class:"summary-value"},ya={class:"summary-item"},ba={class:"summary-value"},Ca={class:"summary-item"},ka={class:"summary-value"},wa={class:"summary-item highlight"},Pa={class:"summary-value"},Da={key:1,class:"narrative-section signup-trend-section"},xa={class:"narrative-content"},Ea={class:"chart-container"},Ba={ref:"signupChart"},Sa={class:"cohort-summary"},Na={class:"cohort-item"},Ra={class:"cohort-value"},Ma={class:"cohort-item"},Ta={class:"cohort-value"},Ua={class:"cohort-item"},Aa={class:"cohort-value"},Fa={class:"cohort-item"},Oa={class:"cohort-value"},La={class:"cohort-item"},Ia={class:"cohort-value"},ja={class:"cohort-item"},za={class:"cohort-value"},Va={key:2,class:"narrative-section comparison-table-section"},Ga={class:"narrative-content"},Wa={class:"comparison-table"},Ha={class:"comparison-row baseline-row"},Ka={class:"comparison-cell"},qa={class:"comparison-cell"},Za={class:"comparison-cell"},Ja={class:"comparison-cell"},Qa={class:"comparison-cell"},Xa={class:"comparison-row campaign-row"},Ya={class:"comparison-row divider-row numbers-row"},$a={class:"comparison-cell"},ae={class:"comparison-cell"},ee={class:"comparison-cell"},se={class:"comparison-cell"},te={class:"comparison-cell"},ne={class:"comparison-row performance-row"},ie={key:3,class:"narrative-section comparison-table-section"},re={class:"narrative-content"},le={class:"comparison-table"},oe={class:"comparison-row baseline-row"},ce={class:"comparison-cell"},me={class:"comparison-cell"},de={class:"comparison-cell"},_e={class:"comparison-cell"},ue={class:"comparison-row campaign-row"},ge={class:"comparison-cell"},pe={class:"comparison-cell"},fe={class:"comparison-cell"},ve={class:"comparison-cell"},he={class:"comparison-cell"},ye={class:"comparison-row divider-row numbers-row"},be={class:"comparison-cell"},Ce={class:"comparison-cell"},ke={class:"comparison-cell"},we={class:"comparison-cell"},Pe={class:"comparison-cell"},De={key:4,class:"narrative-section trend-section"},xe={class:"narrative-title"},Ee={class:"narrative-content"},Be={class:"trend-description"},Se={class:"users-section"},Ne={class:"users-title"},Re={key:0,class:"loading-state"},Me={key:2,class:"users-table-container"},Te=["href"],Ue={key:3,class:"empty-state"};function Ae(i,e,s,r,l,t){const b=u("v-chip"),h=u("v-card-title"),w=u("v-alert"),v=u("v-icon"),g=u("v-expansion-panel-title"),D=u("v-progress-circular"),P=u("v-data-table"),B=u("v-expansion-panel-text"),S=u("v-expansion-panel"),C=u("v-expansion-panels"),x=u("v-card-text"),E=u("v-card");return _(),y(E,{class:f(["campaign-card",t.maturityClass])},{default:o(()=>[d(h,{class:"campaign-header"},{default:o(()=>[a("div",I,[a("div",j,[a("span",z,n(s.campaign.maturity_emoji),1),a("span",V,n(s.campaign.campaign_token),1),d(b,{color:t.maturityColor,size:"small",class:"maturity-chip"},{default:o(()=>[m(n(s.campaign.maturity_stage),1)]),_:1},8,["color"]),s.campaign.projection_confidence?(_(),y(b,{key:0,size:"x-small",color:t.confidenceColor,class:"ml-2"},{default:o(()=>[m(n(s.campaign.projection_confidence)+" confidence ",1)]),_:1},8,["color"])):k("",!0)]),a("div",G,[a("span",W,n(t.formatDate(s.campaign.earliest_cohort))+" - "+n(t.formatDate(s.campaign.latest_cohort)),1),e[0]||(e[0]=a("span",{class:"separator"},"·",-1)),e[1]||(e[1]=a("span",{class:"channel-badge"},"email",-1)),e[2]||(e[2]=a("span",{class:"separator"},"·",-1)),a("span",H,n(s.campaign.cohort_age_days)+"d old",1)])])]),_:1}),d(x,null,{default:o(()=>[s.campaign.alerts&&s.campaign.alerts.length>0?(_(),p("div",K,[(_(!0),p(T,null,U(s.campaign.alerts,(c,A)=>(_(),y(w,{key:A,type:t.getAlertType(c),variant:"tonal",density:"compact",class:"alert-item"},{default:o(()=>[m(n(c),1)]),_:2},1032,["type"]))),128))])):k("",!0),a("div",q,[e[18]||(e[18]=a("h5",{class:"summary-title"},"Campaign Summary",-1)),a("div",Z,[a("div",J,[e[3]||(e[3]=a("span",{class:"summary-label"},"Emails Sent:",-1)),a("span",Q,n(t.formatNumber(s.campaign.emails_sent)),1)]),a("div",X,[e[4]||(e[4]=a("span",{class:"summary-label"},"Opens:",-1)),a("span",Y,n(t.formatNumber(s.campaign.emails_opened)),1)]),a("div",$,[e[5]||
1(e[5]=a("span",{class:"summary-label"},"Open Rate:",-1)),a("span",aa,n(s.campaign.open_rate)+"%",1)]),a("div",ea,[e[6]||(e[6]=a("span",{class:"summary-label"},"Clicks:",-1)),a("span",sa,n(t.formatNumber(s.campaign.emails_clicked)),1)]),a("div",ta,[e[7]||(e[7]=a("span",{class:"summary-label"},"Click Rate:",-1)),a("span",na,n(s.campaign.click_rate)+"%",1)]),a("div",ia,[e[8]||(e[8]=a("span",{class:"summary-label"},"Signups:",-1)),a("span",ra,n(t.formatNumber(s.campaign.signups)),1)]),a("div",la,[e[9]||(e[9]=a("span",{class:"summary-label"},"Trials:",-1)),a("span",oa,n(t.formatNumber(t.totalTrials)),1)]),a("div",ca,[e[10]||(e[10]=a("span",{class:"summary-label"},"Conversions:",-1)),a("span",ma,n(t.formatNumber(t.totalConversions)),1)]),a("div",da,[e[11]||(e[11]=a("span",{class:"summary-label"},"Retained 30d:",-1)),a("span",_a,n(t.formatNumber(s.campaign.retained_30d)),1)]),a("div",ua,[e[12]||(e[12]=a("span",{class:"summary-label"},"Retained 90d:",-1)),a("span",ga,n(t.formatNumber(s.campaign.retained_90d)),1)]),a("div",pa,[e[13]||(e[13]=a("span",{class:"summary-label"},"Retained 180d:",-1)),a("span",fa,n(t.formatNumber(s.campaign.retained_180d)),1)]),a("div",va,[e[14]||(e[14]=a("span",{class:"summary-label"},"Retained 365d:",-1)),a("span",ha,n(t.formatNumber(s.campaign.retained_365d)),1)]),a("div",ya,[e[15]||(e[15]=a("span",{class:"summary-label"},"Membership Revenue:",-1)),a("span",ba,"$"+n(t.membershipRevenue.toFixed(2)),1)]),a("div",Ca,[e[16]||(e[16]=a("span",{class:"summary-label"},"Other Revenue:",-1)),a("span",ka,"$"+n(t.otherRevenue.toFixed(2)),1)]),a("div",wa,[e[17]||(e[17]=a("span",{class:"summary-label"},"Total Revenue:",-1)),a("span",Pa,"$"+n(t.totalRevenue.toFixed(2)),1)])])]),t.dailySignupData.length>=7?(_(),p("div",Da,[e[25]||(e[25]=a("h3",{class:"narrative-title"},"ð Signup Trend",-1)),a("div",xa,[a("div",Ea,[a("canvas",Ba,null,512)]),a("div",Sa,[a("div",Na,[e[19]||(e[19]=a("span",{class:"cohort-label"},"Total Signups:",-1)),a("span",Ra,n(t.formatNumber(t.signupsByAge.total)),1)]),a("div",Ma,[e[20]||(e[20]=a("span",{class:"cohort-label"},"7+ days old:",-1)),a("span",Ta,n(t.formatNumber(t.signupsByAge.sevenPlus)),1)]),a("div",Ua,[e[21]||(e[21]=a("span",{class:"cohort-label"},"30+ days old:",-1)),a("span",Aa,n(t.formatNumber(t.signupsByAge.thirtyPlus)),1)]),a("div",Fa,[e[22]||(e[22]=a("span",{class:"cohort-label"},"90+ days old:",-1)),a("span",Oa,n(t.formatNumber(t.signupsByAge.ninetyPlus)),1)]),a("div",La,[e[23]||(e[23]=a("span",{class:"cohort-label"},"180+ days old:",-1)),a("span",Ia,n(t.formatNumber(t.signupsByAge.oneEightyPlus)),1)]),a("div",ja,[e[24]||(e[24]=a("span",{class:"cohort-label"},"365+ days old:",-1)),a("span",za,n(t.formatNumber(t.signupsByAge.threeSixtyFivePlus)),1)])])])])):k("",!0),s.organicBaseline?(_(),p("div",Va,[e[31]||(e[31]=a("h3",{class:"narrative-title"},[m("Trial Start Rates "),a("span",{class:"table-subtitle"},"(% of signups who start trials)")],-1)),a("div",Ga,[a("div",Wa,[e[30]||(e[30]=a("div",{class:"comparison-row header-row"},[a("div",{class:"comparison-cell empty"}),a("div",{class:"comparison-cell"},"7d"),a("div",{class:"comparison-cell"},"30d"),a("div",{class:"comparison-cell"},"90d"),a("div",{class:"comparison-cell"},"180d"),a("div",{class:"comparison-cell"},"365d")],-1)),a("div",Ha,[e[26]||(e[26]=a("div",{class:"comparison-cell row-label"},"Organic Trial Rate",-1)),a("div",Ka,n(t.formatPercentage(s.organicBaseline.trial_rate_7d)
1),1),a("div",qa,n(t.formatPercentage(s.organicBaseline.trial_rate_30d)),1),a("div",Za,n(t.formatPercentage(s.organicBaseline.trial_rate_90d)),1),a("div",Ja,n(t.formatPercentage(s.organicBaseline.trial_rate_180d)),1),a("div",Qa,n(t.formatPercentage(s.organicBaseline.trial_rate_365d)),1)]),a("div",Xa,[e[27]||(e[27]=a("div",{class:"comparison-cell row-label"},"Campaign Trial Rate",-1)),a("div",{class:f(["comparison-cell",t.getPerformanceClass(s.campaign.performance_vs_organic_7d)])},n(t.formatPercentage(s.campaign.trial_rate_7d)),3),a("div",{class:f(["comparison-cell",t.getPerformanceClass(s.campaign.performance_vs_organic_30d)])},n(t.formatPercentage(s.campaign.trial_rate_30d)),3),a("div",{class:f(["comparison-cell",t.getPerformanceClass(s.campaign.performance_vs_organic_90d)])},n(t.formatPercentage(s.campaign.trial_rate_90d)),3),a("div",{class:f(["comparison-cell",t.getPerformanceClass(s.campaign.performance_vs_organic_180d)])},n(t.formatPercentage(s.campaign.trial_rate_180d)),3),a("div",{class:f(["comparison-cell",t.getPerformanceClass(s.campaign.performance_vs_organic_365d)])},n(t.formatPercentage(s.campaign.trial_rate_365d)),3)]),a("div",Ya,[e[28]||(e[28]=a("div",{class:"comparison-cell row-label"},"Trials",-1)),a("div",$a,n(t.formatNumber(s.campaign.trial_starts_7d)),1),a("div",ae,n(t.formatNumber(s.campaign.trial_starts_30d)),1),a("div",ee,n(t.formatNumber(s.campaign.trial_starts_90d)),1),a("div",se,n(t.formatNumber(s.campaign.trial_starts_180d)),1),a("div",te,n(t.formatNumber(s.campaign.trial_starts_365d)),1)]),a("div",ne,[e[29]||(e[29]=a("div",{class:"comparison-cell row-label"},"vs Organic",-1)),a("div",{class:f(["comparison-cell",t.getPerformanceClass(s.campaign.performance_vs_organic_7d)])},n(t.formatMultiplier(s.campaign.performance_vs_organic_7d)),3),a("div",{class:f(["comparison-cell",t.getPerformanceClass(s.campaign.performance_vs_organic_30d)])},n(t.formatMultiplier(s.campaign.performance_vs_organic_30d)),3),a("div",{class:f(["comparison-cell",t.getPerformanceClass(s.campaign.performance_vs_organic_90d)])},n(t.formatMultiplier(s.campaign.performance_vs_organic_90d)),3),a("div",{class:f(["comparison-cell",t.getPerformanceClass(s.campaign.performance_vs_organic_180d)])},n(t.formatMultiplier(s.campaign.performance_vs_organic_180d)),3),a("div",{class:f(["comparison-cell",t.getPerformanceClass(s.campaign.performance_vs_organic_365d)])},n(t.formatMultiplier(s.campaign.performance_vs_organic_365d)),3)])])])])):k("",!0),s.organicBaseline?(_(),p("div",ie,[e[37]||(e[37]=a("h3",{class:"narrative-title"},[m("Paid Conversion Rates "),a("span",{class:"table-subtitle"},"(% of trials who become paying customers)")],-1)),a("div",re,[a("div",le,[e[36]||(e[36]=a("div",{class:"comparison-row header-row"},[a("div",{class:"comparison-cell empty"}),a("div",{class:"comparison-cell"},"7d"),a("div",{class:"comparison-cell"},"30d"),a("div",{class:"comparison-cell"},"90d"),a("div",{class:"comparison-cell"},"180d"),a("div",{class:"comparison-cell"},"365d")],-1)),a("div",oe,[e[32]||(e[32]=a("div",{class:"comparison-cell row-label"},"Organic Paid Rate",-1)),e[33]||(e[33]=a("div",{class:"comparison-cell"},"-",-1)),a("div",ce,n(t.formatPercentage(s.organicBaseline.paid_rate_30d)),1),a("div",me,n(t.formatPercentage(s.organicBaseline.paid_rate_90d)),1),a("div",de,n(t.formatPercentage(s.organicBaseline.paid_rate_180d)),1),a("div",_e,n(t.formatPercentage(s.organicBaseline.paid_rate_365d)),1)]),a("div",ue,[e[34]||(e[34]=a("div",{class:"comparison-cell row-label"},"Campaign Paid Rate",-1)),a("div",ge,n(t.formatPercentage(s.campaign.paid_rate_7d)),1),a("div",pe,n(t.formatPercentage(s.campaign.paid_rate_30d)),1),a("div",fe,n(t.formatPercentage(s.campaign.paid_rate_90d)),1),a("div",ve,n(t.formatPercentage(s.campaign.paid_rate_180d)),1),a("div",he,n(t.formatPercentage(s.campaign.paid_rate_365d)),1)]),a("div",ye,[e[35]||(e[35]=a("div",{class:"comparison-cell row-label"},"Paid Customers",-1)),a("div",be,n(t.formatNumber(s.campaign.paid_7d)),1),a("div",Ce,n(t.formatNumber(s.campaign.paid_30d)),1),a("div",ke,n(t.formatNumber(s.campaign.paid_90d)),1),a("div",we,n(t.formatNumber(s.campaign.paid_180d)),1),a("div",Pe,n(t.formatNumber(s.campaign.paid_365d)),1)])])])])):k("",!0),s.campaign.performance_trend&&s.campaign.performance_trend!=="too_early"?(_(),p("div",De,[a("h3",xe,[d(v,{icon:t.trendIcon,color:t.trendColor,size:"small",class:"mr-1"},null,8,["icon","color"]),e[38]||(e[38]=m(" Performance Trend ",-1))]),a("div",Ee,[a("div",{class:f(["trend-badge",`trend-${s.campaign.performance_trend}`])},n(t.trendLabel),3),a("p",Be,n(t.trendDescription),1)])])):k("",!0),a("div",Se,[d(C,{"onUpdate:modelValue":t.handleExpansionPanelOpen},{default:o(()=>[d(S,null,{default:o(()=>[d(g,null,{default:o(()=>[a("span",Ne," View "+n(s.campaign.signups)+" Campaign Users ",1)]),_:1}),d(B,null,{default:o(()=>[l.loadingUsers?(_(),p("div",Re,[d(D,{indeterminate:"",color:"primary",size:"32"}),e[39]||(e[39]=a("p",{class:"loading-text"},"Loading users...",-1))])):l.usersError?(_(),y(w,{key:1,type:"error",variant:"tonal",class:"my-4"},{default:o(()=>[m(n(l.usersError),1)]),_:1})):l.campaignUsers.length>0?(_(),p("div",Me,[d(P,{headers:l.userTableHeaders,items:l.campaignUsers,"items-per-page":25,class:"users-table",density:"compact"},{"item.writer_handle":o(({item:c})=>[a("a",{href:`/users/${c.id}`,target:"_blank",class:"user-link"},n(c.writer_handle),9,Te)]),"item.signup_date":o(({item:c})=>[m(n(t.formatDate(c.signup_date)),1)]),"item.trial_start_date":o(({item:c})=>
1[m(n(c.trial_start_date?t.formatDate(c.trial_start_date):"-"),1)]),"item.first_payment_date":o(({item:c})=>[m(n(c.first_payment_date?t.formatDate(c.first_payment_date):"-"),1)]),"item.cancelled_date":o(({item:c})=>[m(n(c.cancelled_date?t.formatDate(c.cancelled_date):"-"),1)]),"item.membership_ended_date":o(({item:c})=>[m(n(c.membership_ended_date?t.formatDate(c.membership_ended_date):"-"),1)]),"item.membership_paid":o(({item:c})=>[m(" $"+n((c.membership_paid/100).toFixed(2)),1)]),"item.other_paid":o(({item:c})=>[m(" $"+n((c.other_paid/100).toFixed(2)),1)]),"item.total_paid":o(({item:c})=>[m(" $"+n((c.total_paid/100).toFixed(2)),1)]),_:1},8,["headers","items"])])):(_(),p("div",Ue,[...e[40]||(e[40]=[a("p",null,"No users found for this campaign.",-1)])]))]),_:1})]),_:1})]),_:1},8,["onUpdate:modelValue"])])]),_:1})]),_:1},8,["class"])}const Fe=R(L,[["render",Ae],["__scopeId","data-v-93985bf4"]]),Oe={name:"EmailMarketingDashboard",components:{EmailCampaignMetricsCard:Fe},data(){return{loading:!0,error:null,emailCampaigns:[],organicBaseline:null,summary:{total_campaigns:0,total_emails_sent:0,total_emails_clicked:0,avg_open_rate:0,avg_click_rate:0,click_to_signup_conversions:0,campaigns_by_maturity:{seedling:0,sprouting:0,growing:0,mature:0}}}},mounted(){this.fetchEmailCampaigns()},methods:{async fetchEmailCampaigns(){var i,e,s,r,l,t,b;this.loading=!0,this.error=null;try{const{apiUrl:h}=N(),w=M(),v=await fetch(`${h}/api/v1/admin/email_marketing/campaigns`,{method:"GET",headers:{Authorization:`Bearer ${w.token}`,"Content-Type":"application/json"}}),g=await v.json();if(v.ok&&g.status==="OK")this.emailCampaigns=g.email_campaigns||[],this.organicBaseline=g.organic_baseline||null,this.summary={total_campaigns:((i=g.summary)==null?void 0:i.total_campaigns)||0,total_emails_sent:((e=g.summary)==null?void 0:e.total_emails_sent)||0,total_emails_clicked:((s=g.summary)==null?void 0:s.total_emails_clicked)||0,avg_open_rate:((r=g.summary)==null?void 0:r.avg_open_rate)||0,avg_click_rate:((l=g.summary)==null?void 0:l.avg_click_rate)||0,click_to_signup_conversions:((t=g.summary)==null?void 0:t.click_to_signup_conversions)||0,campaigns_by_maturity:((b=g.summary)==null?void 0:b.campaigns_by_maturity)||{seedling:0,sprouting:0,growing:0,mature:0}},console.log("ð§ [EmailMarketingDashboard] Loaded campaigns:",{campaigns_count:this.emailCampaigns.length,campaign_tokens:this.emailCampaigns.map(D=>D.campaign_token),first_campaign_sample:this.emailCampaigns[0],organic_baseline:this.organicBaseline});else throw new Error(g.message||"Failed to load email campaigns")}catch(h){console.error("Error fetching email campaigns:",h),this.error=`Failed to load email campaign data: ${h.message}`}finally{this.loading=!1}}}},Le={class:"sans-serif mt-6 breadcrumb-text"},Ie={key:0,class:"loading-container"},je={key:2,class:"dashboard-content"},ze={class:"summary-cards"}
1,Ve={class:"breakdown-item"},Ge={class:"breakdown-value"},We={class:"breakdown-item"},He={class:"breakdown-value"},Ke={class:"baseline-rates"},qe={class:"baseline-item"},Ze={class:"value"},Je={class:"baseline-item"},Qe={class:"value"},Xe={class:"baseline-item"},Ye={class:"value"},$e={class:"baseline-item"},as={class:"value"},es={class:"baseline-item"},ss={class:"value"},ts={class:"baseline-item"},ns={class:"campaigns-section"},is={key:0,class:"empty-state"},rs={key:1,class:"campaigns-list"};function ls(i,e,s,r,l,t){const b=F,h=u("v-progress-circular"),w=u("v-alert"),v=u("v-card-title"),g=u("v-card-text"),D=u("v-card-subtitle"),P=u("v-card"),B=u("EmailCampaignMetricsCard"),S=u("v-container");return _(),y(S,{id:"email-marketing-dashboard-container"},{default:o(()=>[a("div",Le,[e[1]||(e[1]=m(" ð² ",-1)),d(b,{to:"/admin",class:"admin-secret-link"},{default:o(()=>[...e[0]||(e[0]=[m("ToP sEcReT",-1)])]),_:1})]),e[17]||(e[17]=a("h1",{class:"page-title"}," ð§ Email Marketing Dashboard ",-1)),e[18]||(e[18]=a("p",{class:"page-subtitle"}," Track email campaign effectiveness by comparing trial rates, conversion rates, and retention against organic baseline. Evaluate which email campaigns drive the most engagement and long-term value. ",-1)),l.loading?(_(),p("div",Ie,[d(h,{indeterminate:"",color:"primary",size:"48"}),e[2]||(e[2]=a("p",{class:"loading-text"},"Loading email campaign data...",-1))])):l.error?(_(),y(w,{key:1,type:"error",variant:"tonal",class:"my-4"},{default:o(()=>[m(n(l.error),1)]),_:1})):(_(),p("div",je,[a("div",ze,[d(P,{class:"summary-card"},{default:o(()=>[d(v,null,{default:o(()=>[...e[3]||(e[3]=[m("Email Campaigns",-1)])]),_:1}),d(g,{class:"summary-value"},{default:o(()=>[m(n(l.summary.total_campaigns||0),1)]),_:1}),d(D,{class:"summary-subtitle"},{default:o(()=>[m(n((l.summary.total_emails_sent||0).toLocaleString())+" emails sent ",1)]),_:1})]),_:1}),d(P,{class:"summary-card"},{default:o(()=>[d(v,null,{default:o(()=>[...e[4]||(e[4]=[m("Engagement Rates",-1)])]),_:1}),d(g,{class:"summary-breakdown"},{default:o(()=>[a("div",Ve,[e[5]||(e[5]=a("span",{class:"breakdown-label"},"Opens:",-1)),a("span",Ge,n(l.summary.avg_open_rate||0)+"%",1)]),a("div",We,[e[6]||(e[6]=a("span",{class:"breakdown-label"},"Clicks:",-1)),a("span",He,n(l.summary.avg_click_rate||0)+"%",1)])]),_:1})]),_:1}),d(P,{class:"summary-card"},{default:o(()=>[d(v,null,{default:o(()=>[...e[7]||(e[7]=[m("Campaign Maturity",-1)])]),_:1}),d(g,{class:"maturity-breakdown"},{default:o(()=>{var C,x,E,c;return[a("div",null,"ð± Seedling: "+n(((C=l.summary.campaigns_by_maturity)==null?void 0:C.seedling)||0),1),a("div",null,"ð¿ Sprouting: "+n(((x=l.summary.campaigns_by_maturity)==null?void 0:x.sprouting)||0),1),a("div",null,"ð³ Growing: "+n(((E=l.summary.campaigns_by_maturity)==null?void 0:E.growing)||0),1),a("div",null,"ð Mature: "+n(((c=l.summary.campaigns_by_maturity)==null?void 0:c.mature)||0),1)]}),_:1})]),_:1})]),l.organicBaseline?(_(),y(P,{key:0,class:"baseline-card my-6"},{default:o(()=>[d(v,null,{default:o(()=>[m(" ð Organic Baseline ("+n(l.organicBaseline.sample_size.toLocaleString())+" cohorts) ",1)]),_:1}),d(g,null,{default:o(()=>[a("div",Ke,[a("div",qe,[e[8]||(e[8]=a("span",{class:"label"},"7d:",-1)),a("span",Ze,n(l.organicBaseline.trial_rate_7d)+"%",1)]),a("div",Je,[e[9]||(e[9]=a("span",{class:"label"},"30d:",-1)),a("span",Qe,n(l.organicBaseline.trial_rate_30d)+"%",1)]),a("div",Xe,[e[10]||(e[10]=a("span",{class:"label"},"90d:",-1)),a("span",Ye,n(l.organicBaseline.trial_rate_90d)+"%",1)]),a("div",$e,[e[11]||(e[11]=a("span",{class:"label"},"180d:",-1)),a("span",as,n(l.organicBaseline.trial_rate_180d)+"%",1)]),a("div",es,[e[12]||(e[12]=a("span",{class:"label"},"365d:",-1)),a("span",ss,n(l.organicBaseline.trial_rate_365d)+"%",1)]),a("div",ts,[e[13]||(e[13]=a("span",{class:"label"},"Confidence:",-1)),a("span",{class:f(["value confidence",`confidence-${l.organicBaseline.confidence}`])},n(l.organicBaseline.confidence),3)])]),e[14]||(e[14]=a("p",{class:"baseline-note"}," Email campaigns are compared against organic trial rates to measure effectiveness. Opens correspond to ad impressions, clicks to ad clicks. ",-1))]),_:1})]),_:1})):k("",!0),a("div",ns,[e[16]||(e[16]=a("h2",{class:"section-title"},"Email Campaigns",-1)),l.emailCampaigns.length===0?(_(),p("div",is,[...e[15]||(e[15]=[a("p",null,[m("No email campaigns found. Run "),a("c
1ode",null,"rake aggregate_email_campaigns"),m(" to populate email campaign data.")],-1)])])):(_(),p("div",rs,[(_(!0),p(T,null,U(l.emailCampaigns,C=>(_(),y(B,{key:C.campaign_token,campaign:C,"organic-baseline":l.organicBaseline,class:"mb-4"},null,8,["campaign","organic-baseline"]))),128))]))])]))]),_:1})}const _s=R(Oe,[["render",ls],["__scopeId","data-v-ea9fac8c"]]);export{_s 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.