1import{x as pe,b as ve,c as Ne,r as m,s as x,X as g,j as e,ap as F,a as t,e as n,P as b,ay as C,am as W,w as be,C as h,i as u,B as f,p as we,ah as ye,ai as _e,aj as B,ak as I,f as V,g as $,h as q,E as z,au as Z,av as ee,aw as se,ax as w,T as re}from"./index-BQzdqvc6.js";import{L as S}from"./link-2-DB4po91m.js";import{P as ke}from"./package-C8VYX0yN.js";import{F as Ce}from"./funnel-DWx6Mo4s.js";import{Q as Se}from"./qr-code--5j2dS33.js";import{M as te}from"./music-2-e2rM917k.js";import{P as Le}from"./pen-tool-C16q0rOV.js";import{f as U}from"./format-xiKg0Sz1.js";import{C as ae}from"./chart-column-7G3JVGF1.js";import{M as Me,E as ie}from"./mouse-pointer-Q_MREYHQ.js";import{S as X}from"./square-pen-Coa8CsQV.js";import"./en-US-kfCCydOP.js";const Pe=[["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M8.12 8.12 12 12",key:"1alkpv"}],["path",{d:"M20 4 8.12 15.88",key:"xgtan2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M14.8 14.8 20 20",key:"ptml3r"}]],ne=pe("scissors",Pe),Q={free:1,starter:3,artist:5,pro:1/0,label:1/0},De=["active","trialing","past_due"],Y=a=>!a||a.tier==="free"?"free":De.includes(a.subscription_status)?a.tier:"free",Xe=()=>{const{user:a,isLoading:L}=ve(),O=Ne(),[i,G]=m.useState(null),[c,M]=m.useState([]),[ce,H]=m.useState({}),[j,P]=m.useState([]),[y,J]=m.useState([]),[le,p]=m.useState(!0),[de,oe]=m.useState("campaigns");m.useEffect(()=>{if(!L){if(!a){O("/auth?redirect=/connect/dashboard");return}me()}},[a,L,O]);const me=async()=>{if(!a?.id){p(!1);return}try{const{data:s,error:r}=await x.from("presave_service_customers").select("*").eq("user_id",a.id).order("campaign_count",{ascending:!1,nullsFirst:!1});if(r){console.error("Customer fetch error:",r),g.error("Failed to load dashboard"),p(!1);return}if(!s||s.length===0){const{data:o,error:N}=await x.from("presave_service_customers").insert({email:a.email||"",user_id:a.id,tier:"free",subscription_status:"active",name:a.user_metadata?.full_name||null}).select().single();if(N||!o){console.error("Failed to create customer record:",N),g.error("Failed to set up your account. Please try again."),p(!1);return}G(o),M([]),P([]),J([]),p(!1);return}const v=s[0];G(v);const D=s.map(o=>o.id),[k,E,R]=await Promise.all([x.from("presave_service_campaigns").select("*").in("customer_id",D).order("created_at",{ascending:!1}),x.from("smart_links").select("id, slug, title, artist_name, is_active, image_url, created_at, total_views, total_clicks, template").in("customer_id",D).order("created_at",{ascending:!1}),x.from("bio_pages").select("id, username, display_name, avatar_url, is_active, total_views, created_at").in("customer_id",D).order("created_at",{ascending:!1})]);k.error&&console.error("Campaigns fetch error:",k.error),M(k.data||[]),E.error&&console.error("Smart links fetch error:",E.error),P(E.data||[]),R.error&&console.error("Bio pages fetch error:",R.error),J(R.data||[]);const T=(k.data||[]).map(o=>o.id);if(T.length>0){const{data:o,error:N}=await x.from("presave_service_analytics").select("campaign_id, event_type, session_id").in("campaign_id",T).limit(5e4);if(N)console.error("Analytics fetch error:",N);else{const A={};for(const l of T)A[l]={views:0,presaves:0,_sessions:new Set};for(const l of o||[]){const d=A[l.campaign_id];d&&(l.event_type==="page_view"?l.session_id?d._sessions.has(l.session_id)||(d._sessions.add(l.session_id),d.views+=1):d.views+=1:(l.event_type==="presave_complete"||l.event_type==="presave")&&(d.presaves+=1))}const K={};for(const[l,d]of Object.entries(A))K[l]={views:d.views,presaves:d.presaves};H(K)}}else H({})}catch(s){console.error("Error fetching dashboard data:",s),g.error("Failed to load dashboard")}finally{p(!1)}},xe=async s=>{if(confirm("Are you sure you want to delete this campaign?"))try{const{error:r}=await x.from("presave_service_campaigns").delete().eq("id",s);if(r)throw r;M(c.filter(v=>v.id!==s)),g.success("Campaign deleted")}catch(r){console.error("Delete error:",r),g.error("Failed to delete campaign")}},he=async s=>{if(confirm("Are you sure you want to delete this smart link?"))try{const{error:r}=await x.from("smart_links").delete().eq("id",s);if(r)throw r;P(j.filter(v=>v.id!==s)),g.success("Smart link deleted")}catch(r){console.error("Delete error:",r),g.error("Failed to delete smart link")}},ue=()=>{if(!i)return!1;const s=Q[Y(i)]||0;return c.length<s};if(le||L)return e.jsx("div",{className:"min-h-screen bg-background p-6",children:e.jsxs("div",{className:"container mx-auto max-w-6xl space-y-6",children:[e.jsx(F,{className:"h-10 w-64"}),e.jsx("div",{className:"grid md:grid-cols-4 gap-4",children:[...Array(4)].map((s,r)=>e.jsx(F,{className:"h-24"},r))}),e.jsx(F,{className:"h-64"})]})});const _=s=>ce[s.id]??{views:s.total_views||0,presaves:s.total_presaves||0},ge=c.reduce((s,r)=>s+_(r).views,0),fe=c.reduce((s,r)=>s+_(r).presaves,0),je=c.filter(s=>s.is_active&&!s.is_released).length;return e.jsx("div",{className:"min-h-screen bg-background pt-20",children:e.jsxs("div",{className:"container mx-auto max-w-6xl py-8 px-4",children:[e.jsxs("div",{className:"flex flex-col gap-4 mb-8",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold text-foreground",children:"SXR Connect Dashboard"}),e.jsx("p",{className:"text-muted-foreground",children:"Manage your pre-save campaigns, smart links, link in bio pages, and track performance"})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsx(t,{className:"bg-primary text-primary-foreground",disabled:!ue(),asChild:!0,children:e.jsxs(n,{to:"/connect/campaigns/new",children:[e.jsx(b,{className:"h-4 w-4 mr-2"}),"New Campaign"]})}),e.jsx(t,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/connect/smartlinks/new",children:[e.jsx(S,{className:"h-4 w-4 mr-2"}),"New Smart Link"]})}),e.jsx(t,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/connect/short-urls",children:[e.jsx(ne,{className:"h-4 w-4 mr-2"}),"URL Shortener"]})}),e.jsx(t,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/connect/bio",children:[e.jsx(C,{className:"h-4 w-4 mr-2"}),"Link in Bio"]})})]})]}),e.jsxs("div",{className:"mb-8",children:[e.jsx("h2",{className:"text-xs uppercase tracking-[0.2em] text-muted-foreground mb-3",children:"All Services"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 ga
1p-3",children:[{to:"/connect/campaigns/new",icon:W,title:"Pre-Save",desc:"Release campaigns"},{to:"/connect/smartlinks/new",icon:S,title:"Smart Links",desc:"Multi-platform pages"},{to:"/connect/short-urls",icon:ne,title:"URL Shortener",desc:"Short branded links"},{to:"/connect/bio",icon:C,title:"Link in Bio",desc:"Public /@username page"},{to:"/connect/preorders",icon:ke,title:"Pre-Orders",desc:"Vinyl & CD presales"},{to:"/connect/funnels",icon:Ce,title:"Campaign Funnels",desc:"Multi-step fan paths"},{to:"/connect/qr",icon:Se,title:"QR Code Maker",desc:"Branded QR codes"},{to:"/connect/player",icon:te,title:"SXR Player",desc:"Music embeds with SXR badge"},{to:"/connect/genre-finder",icon:te,title:"Genre Finder",desc:"Analyse any track"},{to:"/signature",icon:Le,title:"SXR Signature",desc:"E-sign agreements"}].map(s=>e.jsxs(n,{to:s.to,className:"group rounded-lg border border-border/60 bg-card p-4 transition-colors hover:border-primary/60 hover:bg-accent/10",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx(s.icon,{className:"h-5 w-5 text-primary"}),e.jsx(be,{className:"h-4 w-4 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100"})]}),e.jsx("div",{className:"text-sm font-bold text-foreground",children:s.title}),e.jsx("div",{className:"text-xs text-muted-foreground",children:s.desc})]},s.to))})]}),i&&e.jsx(h,{className:"mb-6 bg-card border-border/50",children:e.jsx(u,{className:"py-4",children:e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(f,{className:`capitalize ${i.tier==="label"?"bg-accent":i.tier==="pro"?"bg-primary":"bg-muted"}`,children:[i.tier," Plan"]}),e.jsx("span",{className:"text-sm text-muted-foreground",children:i.subscription_status==="active"?e.jsxs(e.Fragment,{children:["Renews ",i.current_period_end&&U(new Date(i.current_period_end),"MMM d, yyyy")]}):e.jsxs("span",{className:"text-destructive",children:["Subscription ",i.subscription_status]})})]}),e.jsxs("div",{className:"text-sm text-muted-foreground",children:[c.length," / ",Q[Y(i)]===1/0?"â":Q[Y(i)]," campaigns used"]})]})})}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-8",children:[e.jsx(h,{className:"bg-card border-border/50",children:e.jsx(u,{className:"pt-6",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 bg-primary/10 rounded-lg",children:e.jsx(ae,{className:"h-5 w-5 text-primary"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xl font-bold text-foreground",children:c.length}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Total Campaigns"})]})]})})}),e.jsx(h,{className:"bg-card border-border/50",children:e.jsx(u,{className:"pt-6",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 bg-accent/10 rounded-lg",children:e.jsx(we,{className:"h-5 w-5 text-accent"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xl font-bold text-foreground",children:ge.toLocaleString()}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Unique Views"})]})]})})}),e.jsx(h,{className:"bg-card border-border/50",children:e.jsx(u,{className:"pt-6",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 bg-secondary/10 rounded-lg",children:e.jsx(Me,{className:"h-5 w-5 text-secondary"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xl font-bold text-foreground",children:fe.toLocaleString()}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Total Pre-Saves"})]})]})})}),e.jsx(h,{className:"bg-card border-border/50",children:e.jsx(u,{className:"pt-6",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 bg-green-500/10 rounded-lg",children:e.jsx(W,{className:"h-5 w-5 text-green-500"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xl font-bold text-foreground",children:je}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Active Now"})]})]})})})]}),e.jsxs(ye,{value:de,onValueChange:oe,children:[e.jsxs(_e,{className:"mb-4",children:[e.jsxs(B,{value:"campaigns",children:["Pre-Save Campaigns (",c.length,")"]}),e.jsxs(B,{value:"smartlinks",children:["Smart Links (",j.length,")"]}),e.jsxs(B,{value:"bio",children:["Link in Bio (",y.length,")"]})]}),e.jsx(I,{value:"campaigns",children:e.jsxs(h,{className:"bg-card border-border/50",children:[e.jsxs(V,{children:[e.jsx($,{children:"Your Campaigns"}),e.jsx(q,{children:c.length===0?"Create your first pre-save campaign to get started":"Click a campaign to view anal
1ytics and edit"})]}),e.jsx(u,{children:c.length===0?e.jsxs("div",{className:"text-center py-12",children:[e.jsx("div",{className:"w-16 h-16 bg-muted rounded-full flex items-center justify-center mx-auto mb-4",children:e.jsx(b,{className:"h-8 w-8 text-muted-foreground"})}),e.jsx("h3",{className:"text-lg font-medium text-foreground mb-2",children:"No campaigns yet"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:"Create your first pre-save campaign to start building anticipation."}),e.jsx(t,{asChild:!0,children:e.jsxs(n,{to:"/connect/campaigns/new",children:[e.jsx(b,{className:"h-4 w-4 mr-2"}),"Create Campaign"]})})]}):e.jsx("div",{className:"space-y-3",children:c.map(s=>e.jsxs("div",{className:"flex items-center gap-4 p-4 rounded-lg border border-border/50 hover:border-primary/30 transition-colors",children:[e.jsx("div",{className:"w-16 h-16 bg-muted rounded-lg overflow-hidden shrink-0",children:s.artwork_url?e.jsx("img",{src:s.artwork_url,alt:s.title,className:"w-full h-full object-cover"}):e.jsx("div",{className:"w-full h-full flex items-center justify-center text-muted-foreground",children:"ðµ"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("h3",{className:"font-medium text-foreground truncate",children:s.title}),!s.is_active&&e.jsx(f,{variant:"outline",className:"text-xs",children:"Inactive"}),s.is_released&&e.jsx(f,{variant:"secondary",className:"text-xs",children:"Released"})]}),e.jsx("p",{className:"text-sm text-muted-foreground truncate",children:s.artist_name}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Release: ",U(new Date(s.release_date),"MMM d, yyyy")]})]}),e.jsxs("div",{className:"hidden md:flex items-center gap-6 text-sm",children:[e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"font-medium text-foreground",children:_(s).views}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Unique Views"})]}),e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"font-medium text-foreground",children:_(s).presaves}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Pre-Saves"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(t,{variant:"ghost",size:"icon",asChild:!0,children:e.jsx("a",{href:`/p/${s.slug}`,target:"_blank",rel:"noopener noreferrer",children:e.jsx(z,{className:"h-4 w-4"})})}),e.jsxs(Z,{children:[e.jsx(ee,{asChild:!0,children:e.jsx(t,{variant:"ghost",size:"icon",children:e.jsx(ie,{className:"h-4 w-4"})})}),e.jsxs(se,{align:"end",children:[e.jsx(w,{asChild:!0,children:e.jsxs(n,{to:`/connect/campaigns/${s.id}`,children:[e.jsx(X,{className:"h-4 w-4 mr-2"})," Edit"]})}),e.jsx(w,{asChild:!0,children:e.jsxs(n,{to:`/connect/campaigns/${s.id}/analytics`,children:[e.jsx(ae,{className:"h-4 w-4 mr-2"})," Analytics"]})}),e.jsxs(w,{className:"text-destructive",onClick:()=>xe(s.id),children:[e.jsx(re,{className:"h-4 w-4 mr-2"})," Delete"]})]})]})]})]},s.id))})})]})}),e.jsx(I,{value:"smartlinks",children:e.jsxs(h,{className:"bg-card border-border/50",children:[e.jsxs(V,{children:[e.jsx($,{children:"Your Smart Links"}),e.jsx(q,{children:j.length===0?"Create your first smart link page":"Manage your smart link landing pages"})]}),e.jsx(u,{children:j.length===0?e.jsxs("div",{className:"text-center py-12",children:[e.jsx("div",{className:"w-16 h-16 bg-muted rounded-full flex items-center justify-center mx-auto mb-4",children:e.jsx(S,{className:"h-8 w-8 text-muted-foreground"})}),e.jsx("h3",{className:"text-lg font-medium text-foreground mb-2",children:"No smart links yet"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:"Create a smart link page to share all your music, social, and purchase links in one place."}),e.jsx(t,{asChild:!0,children:e.jsxs(n,{to:"/connect/smartlinks/new",children:[e.jsx(b,{className:"h-4 w-4 mr-2"}),"Create Smart Link"]})})]}):e.jsx("div",{className:"space-y-3",children:j.map(s=>e.jsxs("div",{className:"flex items-center gap-4 p-4 rounded-lg border border-border/50 hover:border-primary/30 transition-colors",children:[e.jsx("div",{className:"w-16 h-16 bg-muted rounded-lg overflow-hidden shrink-0",children:s.image_url?e.jsx("img",{src:s.image_url,alt:s.title,className:"w-full h-full object-cover"}):e.jsx("div",{className:"w-full h-full flex items-center justify-center",children:e.jsx(S,{className:"h-6 w-6 text-muted-foreground"})})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("h3",{className:"font-medium text-foreground truncate",children:s.title}),e.jsx(f,{variant:"outline",className:"text-xs capitalize",children:s.template}),!s.is_active&&e.jsx(f,{variant:"outline",className:"text-xs text-destructive",children:"Inactive"})]}),s.artist_name&&e.jsx("p",{className:"text-sm text-muted-foreground truncate",children:s.artist_name}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["/",s.slug]})]}),e.jsxs("div",{className:"hidden md:flex items-center gap-6 text-sm",children:[e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"font-medium text-foreground",children:s.total_views||0}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Views"})]}),e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"font-medium text-foreground",children:s.total_clicks||0}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Clicks"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(t,{variant:"ghost",size:"icon",asChild:!0,children:e.jsx("a",{href:`/link/${s.slug}`,target:"_blank",rel:"noopener noreferrer",children:e.jsx(z,{className:"h-4 w-4"})})}),e.jsxs(Z,{children:[e.jsx(ee,{asChild:!0,children:e.jsx(t,{variant:"ghost",size:"icon",children:e.jsx(ie,{className:"h-4 w-4"})})}),e.jsxs(se,{align:"end",children:[e.jsx(w,{asChild:!0,children:e.jsxs(n,{to:`/connect/smartlinks/${s.id}`,children:[e.jsx(X,{className:"h-4 w-4 mr-2"})," Edit"]})}),e.jsxs(w,{className:"text-destructive",onClick:()=>he(s.id),children:[e.jsx(re,{className:"h-4 w-4 mr-2"})," Delete"]})]})]})]})]},s.id))})})]})}),e.jsx(I,{value:"bio",children:e.jsxs(h,{className:"bg-card border-border/50",children:[e.jsxs(V,{children:[e.jsx($,{children:"Your Link in Bio Pages"}),e.jsx(q,{children:y.length===0?"Create your first bio page":"Manage your public bio landing pages"})]}),e.jsx(u,{children:y.length===0?e.jsxs("div",{className:"text-center py-12",children:[e.jsx("div",{className:"w-16 h-16 bg-muted rounded-full flex items-center justify-center mx-auto mb-4",children:e.jsx(C,{className:"h-8 w-8 text-muted-foreground"})}),e.jsx("h3",{className:"text-lg font-medium text-foreground mb-2",children:"No bio pages yet"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:"Create a link in bio page to share all your important links from one profile."}),e.jsx(t,{asChild:!0,children:e.jsxs(n,{to:"/connect/bio",children:[e.jsx(b,{className:"h-4 w-4 mr-2"}),"Create Bio Page"]})})]}):e.jsx("div",{className:"space-y-3",children:y.map(s=>e.jsxs("div",{className:"flex items-center gap-4 p-4 rounded-lg border border-border/50 hover:border-primary/30 transition-colors",children:[e.jsx("div",{className:"w-16 h-16 bg-muted rounded-lg overflow-hidden shrink-0",children:s.avatar_url?e.jsx("img",{src:s.avatar_url,alt:s.display_name||s.username,className:"w-full h-full object-cover"}):e.jsx("div",{className:"w-full h-full flex items-center justify-center",children:e.jsx(C,{className:"h-6 w-6 text-muted-foreground"})})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("h3",{className:"font-medium text-foreground truncate",children:s.display_name||`@${s.username}`}),!s.is_active&&e.jsx(f,{variant:"outline",className:"text-xs",children:"Inactive"})]}),e.jsxs("p",{className:"text-sm text-muted-foreground truncate",children:["@",s.username]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Created ",U(new Date(s.created_at),"MMM d, yyyy")]})]}),e.jsx("div",{className:"hidden md:flex items-center gap-6 text-sm",children:e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"font-medium text-foreground",children:s.total_views||0}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Views"})]})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(t,{variant:"ghost",size:"icon",asChild:!0,children:e.jsx("a",{href:`/@${s.username}`,target:"_blank",rel:"noopener noreferrer",children:e.jsx(z,{className:"h-4 w-4"})})}),e.jsx(t,{variant:"ghost",size:"icon",asChild:!0,children:e.jsx(n,{to:`/connect/bio/${s.id}`,children:e.jsx(X,{className:"h-4 w-4"})})})]})]},s.id))})})]})})]})]})})};export{Xe 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.