PageSourceSearch

https://kannibal.ai/assets/PropostePersonalizzate-XpIRh71K.js

js kannibal.ai collected 2026-10-05 12:16:45 UTC 17,255 bytes, 6 lines download raw bytes

1import{o as be,W as ye,p as we,r as l,u as Ce,D as b,j as e,X as ee,S as h,C as y,b as M,g as O,a as c,ad as Se,I as w,_ as De,e as ae,B as g,a$ as Ae,b0 as Pe,b1 as Te,b2 as C,b3 as ke,$ as ze,ah as G,a3 as Ee,a4 as Fe,a5 as Ie,a6 as Le,a7 as Me,v as Oe,x as n,a8 as se,aa as Ge,Z as $,a9 as $e,ab as S,ac as V}from"./index-B5zFf__L.js";import{S as q,a as Q,b as R,c as _,d as D}from"./select-BMPP2yyW.js";import{S as K}from"./switch-B5HnatC8.js";import{T as Ve,a as qe,b as te,c as ie}from"./tabs-Cu5FEifh.js";import{A as Qe,a as Re,b as _e,c as Ke,d as Be,e as He,f as Ue,g as Xe}from"./alert-dialog-DmjgcIih.js";import{P as B}from"./plus-BC539_H2.js";import{F as We}from"./filter-zSPYTNKd.js";import{S as le}from"./star-EftEFrhP.js";import{P as re}from"./pen-Bkvvwggy.js";import{C as Ye}from"./copy-B3XC0f5p.js";import{S as Ze}from"./star-off-COa_GepR.js";import{T as ne}from"./trash-2-BCZoCQkW.js";import{C as Je}from"./circle-check-JiPKFO8-.js";import"./index-BeLe48w1.js";import"./chevron-down-vV7lnHiz.js";/**
2 * @license lucide-react v0.453.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const ea=be("EllipsisVertical",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]]),A=[{value:"general",label:"Generale"},{value:"business_card",label:"Biglietti da Visita"},{value:"kannibal_leads",label:"Kannibal Leads"},{value:"quake",label:"Quake Intelligence"}],aa={general:"bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300",business_card:"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300",kannibal_leads:"bg-green-100 dark:bg-green-900 text-green-700 dark:text-green-300",quake:"bg-purple-100 dark:bg-purple-900 text-purple-700 dark:text-purple-300"},H={title:"",content:"",subject:"",category:"general",tags:[],isTemplate:!1,isDefault:!1,isActive:!0};function va(){const{user:P}=ye(),{toast:r}=we(),[o,ce]=l.useState(""),[m,oe]=l.useState("all"),[de,p]=l.useState(!1),[u,j]=l.useState(null),[t,i]=l.useState(H),[f,T]=l.useState(""),[me,k]=l.useState(!1),[x,U]=l.useState(null),[sa,ue]=l.useState(!1),[v,X]=l.useState(""),[W,z]=l.useState(!1),{data:E,isLoading:xe}=Ce({queryKey:["/api/proposals/custom"]}),F=b({mutationFn:async a=>(await S("POST","/api/proposals/custom",a)).json(),onSuccess:()=>{V.invalidateQueries({queryKey:["/api/proposals/custom"]}),r({title:"Proposta creata",description:"La proposta è stata salvata con successo."}),L()},onError:a=>{r({title:"Errore",description:a.message,variant:"destructive"})}}),N=b({mutationFn:async({id:a,data:s})=>(await S("PUT",`/api/proposals/custom/${a}`,s)).json(),onSuccess:()=>{V.invalidateQueries({queryKey:["/api/proposals/custom"]}),r({title:"Proposta aggiornata",description:"Le modifiche sono state salvate."}),L()},onError:a=>{r({title:"Errore",description:a.message,variant:"destructive"})}}),Y=b({mutationFn:async a=>(await S("DELETE",`/api/proposals/custom/${a}`)).json(),onSuccess:()=>{V.invalidateQueries({queryKey:["/api/proposals/custom"]}),r({title:"Proposta eliminata",description:"La proposta è stata rimossa."}),k(!1),U(null)},onError:a=>{r({title:"Errore",description:a.message,variant:"destructive"})}}),he=b({mutationFn:async a=>(await S("POST","/api/proposals/custom/generate",{prompt:a,category:t.category})).json(),onSuccess:a=>{a.success&&a.data&&(i(s=>({...s,title:a.data.title||s.title,content:a.data.content||s.content,subject:a.data.subject||s.subject})),r({title:"Proposta generata",description:"La proposta AI è stata creata. Puoi modificarla prima di salvarla."})),ue(!1),X(""),z(!1)},onError:a=>{r({title:"Errore generazione",description:a.message,variant:"destructive"}),z(!1)}}),I=a=>{a?(j(a),i({title:a.title,content:a.content,subject:a.subject||"",category:a.category,tags:a.tags||[],isTemplate:a.isTemplate,isDefault:a.isDefault,isActive:a.isActive})):(j(null),i(H)),p(!0)},L=()=>{p(!1),j(null),i(H),T("")},ge=()=>{if(!t.title.trim()||!t.content.trim()){r({title:"Campi obbligatori",description:"Inserisci titolo e contenuto.",variant:"destructive"});return}const a={...t,userId:P==null?void 0:P.id};u?N.mutate({id:u.id,data:a}):F.mutate(a)},Z=()=>{f.trim()&&!t.tags.includes(f.trim())&&(i(a=>({...a,tags:[...a.tags,f.trim()]})),T(""))},pe=a=>{i(s=>({...s,tags:s.tags.filter(d=>d!==a)}))},je=a=>{j(null),i({title:`${a.title} (Copia)`,content:a.content,subject:a.subject||"",category:a.category,tags:a.tags||[],isTemplate:!1,isDefault:!1,isActive:!0}),p(!0)},fe=async a=>{N.mutate({id:a.id,data:{isDefault:!a.isDefault}})},ve=()=>{if(!v.trim()){r({title:"Descrivi la proposta",description:"Inserisci una descrizione per generare la proposta.",variant:"destructive"});return}z(!0),he.mutate(v)},J=((E==null?void 0:E.data)||[]).filter(a=>{const s=o===""||a.title.toLowerCase().includes(o.toLowerCase())||a.content.toLowerCase().includes(o.toLowerCase()),d=m==="all"||a.category===m;return s&&d}),Ne=a=>{var s;return((s=A.find(d=>d.value===a))==null?void 0:s.label)||a};return xe?e.jsx(ee,{children:e.jsxs("div",{className:"max-w-6xl mx-auto 
6space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{className:"h-8 w-48"}),e.jsx(h,{className:"h-10 w-32"})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:Array.from({length:6}).map((a,s)=>e.jsxs(y,{children:[e.jsxs(M,{children:[e.jsx(h,{className:"h-5 w-32"}),e.jsx(h,{className:"h-4 w-24 mt-2"})]}),e.jsx(O,{children:e.jsx(h,{className:"h-20 w-full"})})]},s))})]})}):e.jsxs(ee,{children:[e.jsxs("div",{className:"max-w-6xl mx-auto space-y-6",children:[e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-foreground","data-testid":"text-page-title",children:"Le Mie Proposte"}),e.jsx("p",{className:"text-muted-foreground",children:"Gestisci le tue proposte personalizzate per clienti e lead."})]}),e.jsxs(c,{onClick:()=>I(),"data-testid":"button-create-proposal",children:[e.jsx(B,{className:"w-4 h-4 mr-2"}),"Nuova Proposta"]})]}),e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(Se,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(w,{placeholder:"Cerca proposte...",value:o,onChange:a=>ce(a.target.value),className:"pl-10","data-testid":"input-search-proposals"})]}),e.jsxs(q,{value:m,onValueChange:oe,children:[e.jsxs(Q,{className:"w-full sm:w-48","data-testid":"select-category-filter",children:[e.jsx(We,{className:"w-4 h-4 mr-2"}),e.jsx(R,{placeholder:"Categoria"})]}),e.jsxs(_,{children:[e.jsx(D,{value:"all",children:"Tutte le categorie"}),A.map(a=>e.jsx(D,{value:a.value,children:a.label},a.value))]})]})]}),J.length===0?e.jsx(y,{className:"p-12 text-center",children:e.jsxs("div",{className:"flex flex-col items-center gap-4",children:[e.jsx(De,{className:"w-12 h-12 text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-medium",children:"Nessuna proposta trovata"}),e.jsx("p",{className:"text-muted-foreground mt-1",children:o||m!=="all"?"Prova a modificare i filtri di ricerca.":"Crea la tua prima proposta personalizzata per iniziare."})]}),!o&&m==="all"&&e.jsxs(c,{onClick:()=>I(),"data-testid":"button-create-first-proposal",children:[e.jsx(B,{className:"w-4 h-4 mr-2"}),"Crea prima proposta"]})]})}):e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:J.map(a=>e.jsxs(y,{className:`group relative ${a.isActive?"":"opacity-60"}`,"data-testid":`card-proposal-${a.id}`,children:[e.jsx(M,{className:"pb-2",children:e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs(ae,{className:"text-base truncate flex items-center gap-2",children:[a.title,a.isDefault&&e.jsx(le,{className:"w-4 h-4 text-yellow-500 fill-yellow-500 flex-shrink-0"})]}),e.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[e.jsx(g,{variant:"secondary",className:aa[a.category]||"",children:Ne(a.category)}),a.isTemplate&&e.jsx(g,{variant:"outline",className:"text-xs",children:"Template"})]})]}),e.jsxs(Ae,{children:[e.jsx(Pe,{asChild:!0,children:e.jsx(c,{variant:"ghost",size:"icon",className:"opacity-0 group-hover:opacity-100 transition-opacity","data-testid":`button-proposal-menu-${a.id}`,children:e.jsx(ea,{className:"w-4 h-4"})})}),e.jsxs(Te,{align:"end",children:[e.jsxs(C,{onClick:()=>I(a),"data-testid":`menu-edit-${a.id}`,children:[e.jsx(re,{className:"w-4 h-4 mr-2"}),"Modifica"]}),e.jsxs(C,{onClick:()=>je(a),"data-testid":`menu-duplicate-${a.id}`,children:[e.jsx(Ye,{className:"w-4 h-4 mr-2"}),"Duplica"]}),e.jsx(C,{onClick:()=>fe(a),"data-testid":`menu-toggle-default-${a.id}`,children:a.isDefault?e.jsxs(e.Fragment,{children:[e.jsx(Ze,{className:"w-4 h-4 mr-2"}),"Rimuovi default"]}):e.jsxs(e.Fragment,{children:[e.jsx(le,{className:"w-4 h-4 mr-2"}),"Imposta default"]})}),e.jsx(ke,{}),e.jsxs(C,{onClick:()=>{U(a),k(!0)},className:"text-destructive focus:text-destructive","data-testid":`menu-delete-${a.id}`,children:[e.jsx(ne,{className:"w-4 h-4 mr-2"}),"Elimina"]})]})]})]})}),e.jsxs(O,{children:[e.jsx("p",{className:"text-sm text-muted-foreground line-clamp-3",children:a.content}),Array.isArray(a.tags)&&a.tags.length>0&&e.jsxs("div",{className:"flex flex-wrap gap-1 mt-3",children:[a.tags.slice(0,3).map(s=>e.jsx(g,{variant:"outline",className:"text-xs",children:s},s)),a.tags.length>3&&e.jsxs(g,{variant:"outline",className:"text-xs",children:["+",a.tags.length-3]})]}),e.jsxs("div",{className:"flex items-center justify-between mt-4 pt-3 border-t text-xs text-muted-foreground",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(ze,{className:"w-3 h-3"}),e.jsxs("span",{children:[a.usageCount," utilizzi"]})]}),a.generatedByAi&&e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(G,{className:"w-3 h-3"}),e.jsx("span",{children:"AI"})]})]})]})]},a.id))})]}),e.jsx(Ee,{open:de,onOpenChange:p,children:e.jsxs(Fe,{className:"max-w-3xl max-h-[90vh] overflow-hidden flex flex-col",children:[e.jsxs(Ie,{children:[e.jsx(Le,{children:u?"Modifica Proposta":"Nuova Proposta"}),e.jsx(Me,{children:u?"Modifica i dettagli della proposta.":"Crea una nuova proposta personalizzata o generala con l'AI."})]}),e.jsxs(Ve,{defaultValue:"manual",className:"flex-1 overflow-hidden flex flex-col",children:[e.jsxs(qe,{className:"grid w-full grid-cols-2",children:[e.jsxs(te,{value:"manual","data-testid":"tab-manual-editor",children:[e.jsx(re,{className:"w-4 h-4 mr-2"}),"Editor Manuale"]}),e.jsxs(te,{value:"ai","data-testid":"tab-ai-generator",children:[e.jsx(G,{className:"w-4 h-4 mr-2"}),"Generatore AI"]})]}),e.jsx(ie,{value:"manual",className:"flex-1 overflow-hidden",children:e.jsx(Oe,{className:"h-[calc(60vh-100px)] pr-4",children:e.jsxs("div",{className:"space-y-4 pb-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{htmlFor:"title",children:"Titolo *"}),e.jsx(w,{id:"title",value:t.title,onChange:a=>i(s=>({...s,title:a.target.value})),placeholder:"Es: Proposta Consulenza IT","data-testid":"input-proposal-title"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{htmlFor:"category",children:"Categoria"}),e.jsxs(q,{value:t.category,onValueChange:a=>i(s=>({...s,category:a})),children:[e.jsx(Q,{"data-testid":"select-proposal-category",children:e.jsx(R,{})}),e.jsx(_,{children:A.map(a=>e.jsx(D,{value:a.value,children:a.label},a.value))})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{htmlFor:"subject",children:"Oggetto Email"}),e.jsx(w,{id:"subject",value:t.subject,onChange:a=>i(s=>({...s,subject:a.target.value})),placeholder:"Es: Proposta di collaborazione - [Nome Azienda]","data-testid":"input-proposal-subject"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Usa [Nome Azienda], [Nome 
6Contatto] come segnaposto."})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{htmlFor:"content",children:"Contenuto *"}),e.jsx(se,{id:"content",value:t.content,onChange:a=>i(s=>({...s,content:a.target.value})),placeholder:"Scrivi il contenuto della proposta...",className:"min-h-[200px] resize-none","data-testid":"textarea-proposal-content"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Supporta Markdown per la formattazione."})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Tag"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(w,{value:f,onChange:a=>T(a.target.value),onKeyDown:a=>a.key==="Enter"&&(a.preventDefault(),Z()),placeholder:"Aggiungi tag...","data-testid":"input-proposal-tag"}),e.jsx(c,{type:"button",variant:"outline",onClick:Z,"data-testid":"button-add-tag",children:e.jsx(B,{className:"w-4 h-4"})})]}),t.tags.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1 mt-2",children:t.tags.map(a=>e.jsxs(g,{variant:"secondary",className:"gap-1",children:[a,e.jsx("button",{onClick:()=>pe(a),className:"ml-1 hover:text-destructive",children:e.jsx(Ge,{className:"w-3 h-3"})})]},a))})]}),e.jsxs("div",{className:"flex flex-col gap-3 pt-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(n,{htmlFor:"isTemplate",children:"Usa come Template"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Può essere usato come base per generazioni AI."})]}),e.jsx(K,{id:"isTemplate",checked:t.isTemplate,onCheckedChange:a=>i(s=>({...s,isTemplate:a})),"data-testid":"switch-is-template"})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(n,{htmlFor:"isDefault",children:"Proposta Default"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Selezionata automaticamente per la categoria."})]}),e.jsx(K,{id:"isDefault",checked:t.isDefault,onCheckedChange:a=>i(s=>({...s,isDefault:a})),"data-testid":"switch-is-default"})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(n,{htmlFor:"isActive",children:"Attiva"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Le proposte disattivate non appaiono nelle selezioni."})]}),e.jsx(K,{id:"isActive",checked:t.isActive,onCheckedChange:a=>i(s=>({...s,isActive:a})),"data-testid":"switch-is-active"})]})]})]})})}),e.jsx(ie,{value:"ai",className:"flex-1 overflow-hidden",children:e.jsxs("div",{className:"space-y-4 h-full",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Categoria proposta"}),e.jsxs(q,{value:t.category,onValueChange:a=>i(s=>({...s,category:a})),children:[e.jsx(Q,{"data-testid":"select-ai-category",children:e.jsx(R,{})}),e.jsx(_,{children:A.map(a=>e.jsx(D,{value:a.value,children:a.label},a.value))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{htmlFor:"aiPrompt",children:"Descrivi la proposta che vuoi generare"}),e.jsx(se,{id:"aiPrompt",value:v,onChange:a=>X(a.target.value),placeholder:"Es: Proposta per servizi di consulenza IT per PMI manifatturiere, focalizzata su digitalizzazione dei processi e riduzione costi operativi...",className:"min-h-[150px] resize-none","data-testid":"textarea-ai-prompt"})]}),e.jsx(c,{onClick:ve,disabled:W||!v.trim(),className:"w-full","data-testid":"button-generate-ai",children:W?e.jsxs(e.Fragment,{children:[e.jsx($,{className:"w-4 h-4 mr-2 animate-spin"}),"Generazione in corso..."]}):e.jsxs(e.Fragment,{children:[e.jsx(G,{className:"w-4 h-4 mr-2"}),"Genera con AI"]})}),t.title&&t.content&&e.jsxs(y,{className:"bg-muted/50",children:[e.jsx(M,{className:"pb-2",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Je,{className:"w-4 h-4 text-green-500"}),e.jsx(ae,{className:"text-sm",children:"Proposta generata"})]})}),e.jsx(O,{children:e.jsxs("p",{className:"text-sm text-muted-foreground",children:['La proposta "',t.title,`" è stata generata. Vai all'Editor Manuale per modificarla e salvarla.`]})})]})]})})]}),e.jsxs($e,{className:"gap-2 sm:gap-0",children:[e.jsx(c,{variant:"outline",onClick:L,"data-testid":"button-cancel-editor",children:"Annulla"}),e.jsx(c,{onClick:ge,disabled:F.isPending||N.isPending,"data-testid":"button-save-proposal",children:F.isPending||N.isPending?e.jsxs(e.Fragment,{children:[e.jsx($,{className:"w-4 h-4 mr-2 animate-spin"}),"Salvataggio..."]}):u?"Salva Modifiche":"Crea Proposta"})]})]})}),e.jsx(Qe,{open:me,onOpenChange:k,children:e.jsxs(Re,{children:[e.jsxs(_e,{children:[e.jsx(Ke,{children:"Elimina proposta"}),e.jsxs(Be,{children:['Sei sicuro di voler eliminare "',x==null?void 0:x.title,'"? Questa azione non può essere annullata.']})]}),e.jsxs(He,{children:[e.jsx(Ue,{"data-testid":"button-cancel-delete",children:"Annulla"}),e.jsxs(Xe,{onClick:()=>x&&Y.mutate(x.id),className:"bg-destructive hover:bg-destructive/90","data-testid":"button-confirm-delete",children:[Y.isPending?e.jsx($,{className:"w-4 h-4 mr-2 animate-spin"}):e.jsx(ne,{className:"w-4 h-4 mr-2"}),"Elimina"]})]})]})})]})}export{va 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.