PageSourceSearch

https://klike.ai/assets/c.8uqWGtEL.js

js klike.ai collected 2026-10-05 14:06:27 UTC 15,902 bytes, 1 lines download raw bytes

1import{w as he,aF as ve,y as be,aE as fe,r as n,j as e,B as z,al as je,b as D,bc as ae,bd as se,be as $,R as v,M as ye,N as Ce,O as Ne,P as Se,Q as U,U as q,h as we,J as Re,m as re,aL as G,af as S,e as _e,d as ke,s as H,bf as Ae,a4 as Pe,T as Le,ax as Te,bg as Be}from"./e.DS2xrfS2.js";import{C as Y}from"./c.kwYYBHu1.js";import{R as Ee}from"./c.DDUDoe3h.js";import{S as De}from"./c.C6ycg9Ue.js";const ne={en:{title:"Ads Budget Calculator",subtitle:"Calculate the recommended advertising budget based on your revenue goals and creative scores",revenueGoal:"Monthly Revenue Goal ($)",avgTicket:"Average Ticket Price ($)",objective:"Campaign Objective",objectiveLeads:"Generate Leads",objectiveSales:"Generate Sales",objectiveCommunity:"Expand Community",score:"Creative Score (0-100)",calculate:"Calculate Budget",calculating:"Calculating...",reset:"Reset",results:"Results",readyTitle:"Ready to Calculate",readyDesc:"Set your parameters and click Calculate to get budget recommendations",tryPredictor:"Try Performance Predictor",predictorDesc:"Predict CTR, CPC, ROAS and more",selectCreatives:"Select Video Creatives",selectStaticCreatives:"Select Static Ads",selectedCount:"selected",avgScore:"Average Score",recommendedRange:"Recommended monthly budget",minBudget:"Minimum",maxBudget:"Recommended",rangeHint:"Start at the minimum and scale toward the recommended amount as results confirm the creative works.",noAnalyses:"No analyses yet. Analyze creatives first or enter a score manually.",noStaticAnalyses:"No static ad analyses yet."},"pt-BR":{title:"Calculadora de Orçamento de Ads",subtitle:"Calcule o orçamento de publicidade recomendado com base nas suas metas de receita e scores criativos",revenueGoal:"Meta de Receita Mensal (R$)",avgTicket:"Ticket Médio (R$)",objective:"Objetivo da Campanha",objectiveLeads:"Gerar Leads",objectiveSales:"Gerar Vendas",objectiveCommunity:"Expandir Comunidade",score:"Score Criativo (0-100)",calculate:"Calcular Orçamento",calculating:"Calculando...",reset:"Resetar",results:"Resultados",readyTitle:"Pronto para Calcular",readyDesc:"Configure seus parâmetros e clique em Calcular para obter recomendações de orçamento",tryPredictor:"Experimente o Preditor de Performance",predictorDesc:"Preveja CTR, CPC, ROAS e mais",selectCreatives:"Selecionar Vídeos",selectStaticCreatives:"Selecionar Anúncios Estáticos",selectedCount:"selecionados",avgScore:"Média do Score",recommendedRange:"Orçamento mensal recomendado",minBudget:"Mínimo",maxBudget:"Recomendado",rangeHint:"Comece no mínimo e evolua até o valor recomendado conforme os resultados confirmarem o criativo.",noAnalyses:"Nenhuma análise de vídeo. Analise criativos primeiro ou insira um score manualmente.",noStaticAnalyses:"Nenhuma análise de anúncio estático ainda."},es:{title:"Calculadora de Presupuesto de Ads",subtitle:"Calcula el presupuesto publicitario recomendado según tus metas de ingresos y scores creativos",revenueGoal:"Meta de Ingresos Mensual ($)",avgTicket:"Ticket Promedio ($)",objective:"Objetivo de Campaña",objectiveLeads:"Generar Leads",objectiveSales:"Generar Ventas",objectiveCommunity:"Expandir Comunidad",score:"Score Creativo (0-100)",calculate:"Calcular Presupuesto",calculating:"Calculando...",reset:"Resetear",results:"Resultados",readyTitle:"Listo para Calcular",readyDesc:"Configura tus parámetros y haz clic en Calcular para obtener recomendaciones",tryPredictor:"Prueba el Predictor de Rendimiento",predictorDesc:"Predice CTR, CPC, ROAS y más",selectCreatives:"Seleccionar Videos",selectStaticCreatives:"Seleccionar Anuncios Estáticos",selectedCount:"seleccionados",avgScore:"Promedio del Score",recommendedRange:"Presupuesto mensual recomendado",minBudget:"Mínimo",maxBudget:"Recomendado",rangeHint:"Empieza por el mínimo y escala hasta el recomendado cuando los resultados confirmen el creativo.",noAnalyses:"Sin análisis aún. Analiza creativos primero o ingresa un score manualmente.",noStaticAnalyses:"Sin análisis de anuncios estáticos aún."}};function ce({label:m,analyses:g,selectedIds:M,onToggle:w,selectedCount:a,avgScore:N,selectedCountLabel:R,avgScoreLabel:b,noAnalysesLabel:_,scoreLabel:f,manualScore:k,onManualScoreChange:j,mediaKind:A="video",showManualFallback:y=!0,loading:P=!1}){const[d,p]=n.useState(!1),C=n.useRef(null),L=A==="static"?Ae:Pe;if(n.useEffect(()=>{const r=x=>{C.current&&!C.current.contains(x.target)&&p(!1)};return document.addEventListener("mousedown",r),()=>document.removeEventListener("mousedown",r)},[]),P)return e.jsxs("div",{className:"space-y-2","aria-busy":"true",children:[e.jsx(v,{children:m}),e.jsx("div",{className:"rounded-lg border border-border bg-card p-2 space-y-2",children:[0,1,2].map(r=>e.jsxs("div",{className:"flex items-center gap-2.5 px-1 py-1",children:[e.jsx(G,{className:"h-4 w-4 roun
1ded"}),e.jsx(G,{className:"h-8 w-12 rounded"}),e.jsx(G,{className:"h-3.5 flex-1 rounded"}),e.jsx(G,{className:"h-5 w-6 rounded"})]},r))})]});if(g.length===0)return e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:m}),e.jsx("p",{className:"text-xs text-muted-foreground",children:_}),y&&e.jsxs(e.Fragment,{children:[e.jsx(v,{children:f}),e.jsx(q,{type:"number",placeholder:"75",value:k,onChange:r=>j(r.target.value),min:0,max:100})]})]});const u={A:"bg-green-500/15 text-green-700 border-green-500/30",B:"bg-blue-500/15 text-blue-700 border-blue-500/30",C:"bg-yellow-500/15 text-yellow-700 border-yellow-500/30",D:"bg-red-500/15 text-red-700 border-red-500/30"};return e.jsxs("div",{className:"space-y-2 relative",ref:C,children:[e.jsx(v,{children:m}),e.jsxs("button",{type:"button",onClick:()=>p(r=>!r),className:S("w-full flex items-center justify-between rounded-lg border px-3 py-2.5 text-sm transition-colors bg-card hover:bg-muted/60",d?"border-primary ring-1 ring-primary/20":"border-border"),children:[a===0?e.jsxs("span",{className:"text-muted-foreground",children:[m,"..."]}):e.jsxs("span",{className:"flex items-center gap-2 truncate",children:[e.jsxs("span",{className:"font-medium",children:[a," ",R]}),e.jsx("span",{className:"text-muted-foreground",children:"·"}),e.jsxs("span",{className:"text-muted-foreground",children:[b,": ",N]})]}),e.jsx(_e,{className:S("h-4 w-4 text-muted-foreground transition-transform shrink-0 ml-2",d&&"rotate-180")})]}),d&&e.jsx("div",{className:"absolute z-50 mt-1 w-full rounded-lg border bg-card shadow-lg",children:e.jsx("div",{className:"max-h-[220px] overflow-y-auto p-1 space-y-0.5",children:g.map(r=>{const x=M.includes(r.id),T=r.overall_grade||"B";return e.jsxs("button",{type:"button",onClick:()=>w(r.id),className:S("w-full flex items-center gap-2.5 rounded-md px-2.5 py-2 text-left transition-colors",x?"bg-primary/10 border border-primary/30":"hover:bg-muted/60 border border-transparent"),children:[e.jsx("div",{className:S("h-4 w-4 rounded border flex items-center justify-center shrink-0 transition-colors",x?"bg-primary border-primary text-primary-foreground":"border-muted-foreground/30"),children:x&&e.jsx(De,{className:"h-3 w-3"})}),r.thumbnail_url?e.jsx("img",{src:r.thumbnail_url,alt:"",className:"h-8 w-12 rounded object-cover shrink-0"}):e.jsx("div",{className:"h-8 w-12 rounded bg-muted flex items-center justify-center shrink-0",children:e.jsx(L,{className:"h-3.5 w-3.5 text-muted-foreground/50"})}),e.jsx("div",{className:"flex-1 min-w-0",children:e.jsx("p",{className:"text-sm font-medium truncate",children:r.title})}),e.jsx(ke,{variant:"outline",className:S("text-xs font-bold shrink-0",u[T]||""),children:T})]},r.id)})})})]})}function Ve(){const{toast:m}=he(),{language:g}=ve(),M=be(),{user:w}=fe(),a=ne[g]||ne["pt-BR"],N=g==="pt-BR"?"pt-BR":g==="es"?"es-419":"en-US",R=g==="pt-BR"?"BRL":"USD",b=t=>{if(!t)return"";const s=Number(t);return isFinite(s)?s.toLocaleString(N,{style:"currency",currency:R,minimumFractionDigits:2,maximumFractionDigits:2}):""},_=t=>{const s=t.replace(/\D/g,"");return s?(Number(s)/100).toString():""},[f,k]=n.useState(""),[j,A]=n.useState(""),[y,P]=n.useState("Gerar vendas"),[d,p]=n.useState(""),[C,L]=n.useState(!1),[u,r]=n.useState(null),[x,T]=n.useState([]),[B,K]=n.useState([]),[F,ie]=n.useState([]),[E,J]=n.useState([]),[Q,W]=n.useState(!0);n.useEffect(()=>{if(!w)return;(async()=>{W(!0);const[{data:s,error:c},{data:l,error:i}]=await Promise.all([H.from("analyses").select("id, title, thumbnail_url, overall_score, overall_grade").order("created_at",{ascending:!1}).limit(200),H.from("static_ad_analyses").select("id, briefing, overall_score, grade, created_at").order("created_at",{ascending:!1}).limit(200)]);if(c&&console.error("[PaidTraffic] analyses fetch failed:",c),i&&console.error("[PaidTraffic] static analyses fetch failed:",i),s&&T(s.filter(h=>h.overall_score!=null)),l){const h=l.filter(o=>o.overall_score!=null).map(o=>{var ee,te;return{id:o.id,title:((ee=o==null?void 0:o.briefing)==null?void 0:ee.companyName)||((te=o==null?void 0:o.briefing)==null?void 0:te.productName)||`Static · ${new Date(o.created_at).toLocaleDateString()}`,thumbnail_url:null,overall_score:Number(o.overall_score)||0,overall_grade:
1o.grade||"B"}});ie(h)}W(!1)})()},[w]),n.useEffect(()=>{const t=x.filter(i=>B.includes(i.id)),s=F.filter(i=>E.includes(i.id)),c=[...t,...s];if(c.length===0)return;const l=c.reduce((i,h)=>i+Number(h.overall_score),0)/c.length;p(Math.round(l).toString())},[B,E,x,F]);const le=t=>{K(s=>s.includes(t)?s.filter(c=>c!==t):[...s,t])},oe=t=>{J(s=>s.includes(t)?s.filter(c=>c!==t):[...s,t])},de=n.useCallback(()=>{k(""),A(""),P("Gerar vendas"),p(""),r(null),K([]),J([])},[]),ue=async()=>{const t=parseFloat(f),s=parseFloat(j),c=parseFloat(d);if(!f||isNaN(t)||t<=0){m({title:"Invalid Revenue Goal",description:"Enter a positive number.",variant:"destructive"});return}if(!j||isNaN(s)||s<=0){m({title:"Invalid Ticket Price",description:"Enter a positive number.",variant:"destructive"});return}if(!d||isNaN(c)||c<0||c>100){m({title:"Invalid Score",description:"Enter a value between 0 and 100.",variant:"destructive"});return}L(!0),r(null);try{const{data:l,error:i}=await H.functions.invoke("calculate-budget",{body:{monthly_revenue_goal:t,avg_ticket_price:s,score:c,campaign_objective:y}});if(i)throw i;const h=(l==null?void 0:l.budget_range)??l;r(h),m({title:"Budget Calculated!",description:"Your recommended budget is ready."})}catch(l){const i=l instanceof Error?l.message:"Unknown error";m({title:"Calculation Error",description:i,variant:"destructive"})}finally{L(!1)}},me=!!f&&!!j&&!!d&&!C,xe=y==="Gerar leads"?Le:y==="Expandir Comunidade"?Te:Be,I=t=>t.toLocaleString(N,{style:"currency",currency:R,minimumFractionDigits:0,maximumFractionDigits:0}),ge=/(budget|spend|revenue|ticket|cost|cpa|cpl|cpc|cpm|valor|orcamento|receita)/i,pe=(t,s)=>typeof s!="number"||!isFinite(s)?String(s??", "):ge.test(t)?I(s):s.toLocaleString(N,{maximumFractionDigits:2}),X=t=>typeof t=="number"&&isFinite(t)?t:null,O=u?X(u.min_budget??u.minimum_budget):null,V=u?X(u.max_budget??u.maximum_budget):null,Z=u?Object.entries(u).filter(([t])=>!["min_budget","minimum_budget","max_budget","maximum_budget"].includes(t)):[];return e.jsxs("div",{className:"space-y-6 p-4 md:p-6 max-w-7xl mx-auto",children:[e.jsxs("div",{className:"flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-foreground",children:a.title}),e.jsx("p",{className:"text-muted-foreground mt-1",children:a.subtitle})]}),e.jsxs(z,{variant:"outline",size:"sm",onClick:()=>M("/dashboard/media-predictor"),children:[e.jsx(je,{className:"mr-2 h-4 w-4"}),a.tryPredictor]})]}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-[400px_1fr]",children:[e.jsxs(D,{children:[e.jsx(ae,{className:"pb-4",children:e.jsxs(se,{className:"flex items-center gap-2 text-base",children:[e.jsx(Y,{className:"h-5 w-5 text-primary"}),a.title]})}),e.jsxs($,{className:"space-y-4",children:[e.jsx(ce,{label:a.selectCreatives,analyses:x,selectedIds:B,onToggle:le,selectedCount:B.length,avgScore:d,selectedCountLabel:a.selectedCount,avgScoreLabel:a.avgScore,noAnalysesLabel:a.noAnalyses,scoreLabel:a.score,manualScore:d,onManualScoreChange:p,loading:Q}),e.jsx(ce,{label:a.selectStaticCreatives,analyses:F,selectedIds:E,onToggle:oe,selectedCount:E.length,avgScore:d,selectedCountLabel:a.selectedCount,avgScoreLabel:a.avgScore,noAnalysesLabel:a.noStaticAnalyses,scoreLabel:a.score,manualScore:d,onManualScoreChange:p,mediaKind:"static",showManualFallback:!1,loading:Q}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:a.objective}),e.jsxs(ye,{value:y,onValueChange:t=>P(t),children:[e.jsx(Ce,{children:e.jsx(Ne,{})}),e.jsxs(Se,{children:[e.jsx(U,{value:"Gerar leads",children:a.objectiveLeads}),e.jsx(U,{value:"Gerar vendas",children:a.objectiveSales}),e.jsx(U,{value:"Expandir Comunidade",children:a.objectiveCommunity})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:a.revenueGoal}),e.jsx(q,{type:"text",inputMode:"numeric",placeholder:b("10000"),value:b(f),onChange:t=>k(_(t.target.value))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:a.avgTicket}),e.jsx(q,{type:"text",inputMode:"numeric",placeholder:b("150"),value:b(j),onChange:t=>A(_(t.target.value))})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(z,{onClick:ue,className:"flex-1",disabled:!me,children:C?e.jsxs(e.Fragment,{children:[e.jsx(we,{className:"mr-2 h-4 w-4 animate-spin"})," ",a.calculating]}):e.jsxs(e.Fragment,{children:[e.jsx(Y,{className:"mr-2 h-4 w-4"})," ",a.calculate]})}),e.jsx(z,{variant:"outline",size:"icon",onClick:de,children:e.jsx(Ee,{className:"h-4 w-4"})})]})]})]}),e.jsx(Re,{mode:"wait",children:u?e.jsx(re.div,{initial:{opacity:0,y:20}
1,animate:{opacity:1,y:0},exit:{opacity:0},children:e.jsxs(D,{children:[e.jsx(ae,{children:e.jsxs(se,{className:"flex items-center gap-2",children:[e.jsx(xe,{className:"h-5 w-5 text-primary"}),a.results]})}),e.jsxs($,{className:"space-y-6",children:[(O!==null||V!==null)&&e.jsxs("div",{className:"rounded-2xl border border-primary/20 bg-primary/5 p-5 sm:p-6",children:[e.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:a.recommendedRange}),e.jsxs("div",{className:"mt-3 flex flex-col gap-3 sm:flex-row sm:items-end sm:gap-6",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wider text-muted-foreground",children:a.minBudget}),e.jsx("p",{className:"mt-1 text-2xl font-bold text-foreground sm:text-3xl tabular-nums",children:O!==null?I(O):", "})]}),e.jsx("div",{className:"hidden h-8 w-px shrink-0 bg-primary/20 sm:block"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wider text-muted-foreground",children:a.maxBudget}),e.jsx("p",{className:"mt-1 text-2xl font-bold text-primary sm:text-3xl tabular-nums",children:V!==null?I(V):", "})]})]}),e.jsx("p",{className:"mt-4 text-sm text-muted-foreground",children:a.rangeHint})]}),Z.length>0&&e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:Z.map(([t,s])=>e.jsxs(D,{className:"p-4",children:[e.jsx("p",{className:"text-xs text-muted-foreground uppercase tracking-wider mb-1",children:t.replace(/_/g," ")}),e.jsx("p",{className:"text-lg font-bold text-foreground tabular-nums",children:pe(t,s)})]},t))})]})]})},"results"):e.jsx(re.div,{initial:{opacity:0}
1,animate:{opacity:1},exit:{opacity:0},children:e.jsx(D,{className:"h-full flex items-center justify-center min-h-[400px] border-dashed",children:e.jsxs($,{className:"text-center py-12",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-muted flex items-center justify-center mx-auto mb-4",children:e.jsx(Y,{className:"h-8 w-8 text-muted-foreground"})}),e.jsx("h3",{className:"font-medium text-foreground mb-2",children:a.readyTitle}),e.jsx("p",{className:"text-sm text-muted-foreground max-w-xs",children:a.readyDesc})]})})},"placeholder")})]})]})}export{Ve 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.