PageSourceSearch

https://studio.huskyvoice.ai/assets/ContactsLeads-Kqma-5zk.js

js huskyvoice.ai collected 2026-10-05 13:55:54 UTC 27,514 bytes, 5 lines download raw bytes

1import{d as nt,Y as it,e as y,f as F,y as we,z as dt,o as d,c as u,D as ee,g as s,w as i,j as v,t as g,u as o,bm as de,a$ as gt,b as r,b7 as ut,k as q,l as Ce,m as $e,n as Se,p as Ne,q as z,F as W,r as Z,s as c,U as C,aj as Ve,L as ge,G as b,c6 as yt,h as te,aU as pt,aF as ct,a3 as mt,a4 as vt,a5 as xt,X as bt,ah as ht,a9 as ft,x as Pe,W as De,cm as kt,_ as _t}from"./index-BXzb0qht.js";import{_ as wt}from"./ScheduleCallSheet.vue_vue_type_script_setup_true_lang-CGCMZnQJ.js";import{C as Ct,a as $t,_ as St,b as Nt}from"./EditContactDialog.vue_vue_type_script_setup_true_lang-u-cBq8Uk.js";import{_ as Vt}from"./Toolbar.vue_vue_type_script_setup_true_lang-kFReS25M.js";import{P as Pt}from"./papaparse.min-BdPoldJT.js";import{T as Dt}from"./table-2-D79GF7Gp.js";import{L as Lt}from"./layout-grid-Cll_A8Rc.js";import{D as Ut}from"./download-BmnV9iwx.js";import{U as At}from"./upload-CTmd-m9p.js";import{C as It}from"./calendar-clock-DMe2OTmm.js";import{S as Et}from"./square-pen-Bp9Fb5eu.js";import{M as Le}from"./message-circle-DS3_m2Gi.js";import{C as Rt}from"./chevron-left-C-Jz9uGV.js";import"./SheetContent.vue_vue_type_script_setup_true_lang-BVqpT_l2.js";import"./SheetTitle.vue_vue_type_script_setup_true_lang-BFiuitLs.js";import"./SearchableCombobox.vue_vue_type_script_setup_true_lang-CEjUFeqx.js";import"./TimezoneConstants-CGu0l3Xj.js";import"./user-plus-CCHieXvV.js";import"./phone-incoming-B8W1Avf6.js";import"./square-check-big-D7h64a5Z.js";const jt={class:"contacts-leads-page bg-background"},Ft={class:"relative w-56"},zt={class:"inline-flex rounded-md border border-gray-300 dark:border-gray-600 flex-shrink-0"},Bt={class:"flex-1 flex overflow-hidden min-h-0"},Tt={key:0,class:"p-4"},Mt={key:0,class:"flex justify-center items-center py-20"},Ot={key:1,class:"bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 overflow-x-auto"},qt={class:"w-full"},Wt={class:"bg-white dark:bg-gray-800 divide-y divide-gray-100 dark:divide-gray-700"},Zt=["onClick"],Gt={class:"px-3 py-2.5 whitespace-nowrap"},Jt={class:"flex items-center gap-2.5"},Kt={class:"min-w-0"},Qt={key:0,class:"text-xs text-gray-500 dark:text-gray-400 truncate"},Ht={class:"px-3 py-2.5 whitespace-nowrap"},Xt={class:"text-sm text-gray-600 dark:text-gray-400"},Yt={class:"px-3 py-2.5 whitespace-nowrap"},ea={class:"text-sm text-gray-600 dark:text-gray-400 truncate max-w-[140px]"},ta={class:"px-3 py-2.5 whitespace-nowrap"},aa={class:"text-sm text-gray-600 dark:text-gray-400 truncate max-w-[180px]"},ra={class:"px-3 py-2.5 whitespace-nowrap"},sa={class:"px-3 py-2.5 whitespace-nowrap"},oa={key:0,class:"text-xs"},la={class:"font-medium text-gray-700 dark:text-gray-300"},na={class:"text-gray-500 dark:text-gray-400"},ia={key:1,class:"text-xs text-gray-500 dark:text-gray-400"},da={class:"px-3 py-2.5 whitespace-nowrap sticky right-0 bg-white dark:bg-gray-800 group-hover:bg-gray-50/50 dark:group-hover:bg-gray-700/50"},ga={class:"flex items-center justify-end gap-1"},ua={key:0,class:"text-center py-20"},ya={class:"w-20 h-20 bg-gray-900 dark:bg-gray-100 rounded-full flex items-center justify-center mx-auto mb-4"},pa={key:2,class:"mt-6 grid grid-cols-3 items-center bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm px-6 py-4"},ca={class:"flex items-center gap-2"},ma={class:"flex items-center gap-2"},va={class:"text-sm text-gray-700"},xa={class:"flex items-center gap-1 ml-4"},ba={class:"px-3 text-sm text-gray-700"},ha={key:1,class:"p-8"},fa={key:0,class:"flex justify-center items-center py-20"},ka={key:1,class:"flex gap-4 overflow-x-auto pb-4 px-4"},_a={class:"flex items-center justify-between p-3 border-b border-gray-200 dark:border-gray-600"},wa={class:"flex items-center gap-2"},Ca={class:"font-semibold text-gray-900 dark:text-gray-100 text-sm"},$a={class:"space-y-2 p-3 overflow-y-auto flex-1"},Sa=["onClick"],Na={class:"flex items-center gap-2 mb-2"},Va={class:"flex-1 min-w-0"},Pa={class:"text-xs text-gray-500 dark:text-gray-400 truncate"},Da={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},La={key:0,class:"text-center py-8 text-gray-400 dark:text-gray-500 text-sm"},Ua={class:"space-y-4"},Aa={class:"flex items-center justify-between gap-3"},Ia={class:"flex items-center gap-2"},Ea={key:0,class:"text-sm text-gray-500"},Ra={key:0,class:"border rounded-md overflow-hidden"},ja={class:"max-h-80 overflow-y-auto"},Fa={class:"w-full text-sm"},za={class:"px-3 py-1.5"},Ba={class:"px-3 py-1.5"},Ta={class:"px-3 py-1.5"},Ma={class:"px-3 py-1.5"},Oa={class:"px-3 py-1.5 text-right"},qa=["onClick"],Wa={key:0,class:"px-3 py-2 text-xs text-red-600 bg-red-50 dark:bg-red-950/30 border-t border-gray-200 dark:border-gray-700"},Za=nt({__name:"ContactsLeads",setup(Ga){const{toast:D}=it(),{openForNumber:Ue}=kt(),G=y(!1),h=y([]),B=y(""),J=y(""),N=y("table"),L=y(null),T=y(!1),K=y(!1),Q=y(null),Ae=y([]),m=y(1),I=y(10),U=y(1),E=y(0),Ie=y(!1),Ee=y(""),ae=y(!1),ue=y(""),ye=y(""),M=y(!1),H=y(null),pe=y(null),X=y(!1),$=y([]);F(()=>h.value),F(()=>h.value.length>
10&&Ae.value.length===h.value.length);const Re=F(()=>(m.value-1)*I.value),je=F(()=>Math.min(m.value*I.value,E.value)),Fe=F(()=>h.value),ce=e=>(e==null?void 0:e.split(" ").map(t=>t[0]).join("").toUpperCase())||"?",x=e=>!!(e!=null&&e.is_deleted),me=e=>x(e)?"Deleted Contact":(e==null?void 0:e.name)||"",ze=e=>x(e)?"[email protected]":(e==null?void 0:e.email)||"",Be=e=>x(e)?"***-***-****":(e==null?void 0:e.phone)||"",re=e=>x(e)?"—":(e==null?void 0:e.company)||"",ve=e=>e?e.type==="contact_created"?"Contact Added":e.type==="status_change"?"Status Changed":e.agentName||"Call":"",Te=e=>e?typeof e=="string"?e:Array.isArray(e)?e.map(t=>typeof t=="string"?t:typeof t=="object"&&t!==null?t.text||t.content||t.note||JSON.stringify(t):"").filter(Boolean).join(`
2`):"":"",xe=["New","Attempting Contact","Contacted","Follow-up Required","Meeting Scheduled","Meeting No Show","Qualified","In Evaluation","Commercial Discussion","Nurture","Not Reachable","Disqualified","Closed – Won","Closed – Lost"],Me=e=>({New:"bg-gray-50 text-gray-700 border border-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:border-gray-700","Attempting Contact":"bg-gray-100 text-gray-700 border border-gray-300 dark:bg-gray-700 dark:text-gray-200 dark:border-gray-600",Contacted:"bg-gray-200 text-gray-800 border border-gray-300 dark:bg-gray-600 dark:text-gray-100 dark:border-gray-500","Follow-up Required":"bg-gray-300 text-gray-900 border border-gray-400 dark:bg-gray-500 dark:text-gray-900 dark:border-gray-400","Meeting Scheduled":"bg-gray-400 text-white border border-gray-500 dark:bg-gray-400 dark:text-gray-900 dark:border-gray-300","Meeting No Show":"bg-gray-200 text-gray-900 border-2 border-gray-400 dark:bg-gray-700 dark:text-gray-100 dark:border-gray-500",Qualified:"bg-gray-500 text-white border border-gray-600 dark:bg-gray-300 dark:text-gray-900 dark:border-gray-200","In Evaluation":"bg-gray-600 text-white border border-gray-700 dark:bg-gray-200 dark:text-gray-900 dark:border-gray-100","Commercial Discussion":"bg-gray-700 text-white border border-gray-800 dark:bg-gray-100 dark:text-gray-900 dark:border-gray-300",Nurture:"bg-gray-100 text-gray-500 border border-gray-200 dark:bg-gray-800 dark:text-gray-500 dark:border-gray-700","Not Reachable":"bg-gray-200 text-gray-900 border-2 border-gray-400 dark:bg-gray-700 dark:text-gray-100 dark:border-gray-500",Disqualified:"bg-white text-gray-500 border-2 border-gray-400 dark:bg-gray-900 dark:text-gray-500 dark:border-gray-600","Closed – Won":"bg-gray-700 text-white dark:bg-gray-300 dark:text-gray-900","Closed – Lost":"bg-white text-gray-900 border-2 border-gray-900 dark:bg-gray-900 dark:text-gray-100 dark:border-gray-100"})[e]||"bg-gray-100 text-gray-700 border border-gray-300 dark:bg-gray-800 dark:text-gray-300 dark:border-gray-600",Oe=e=>e==="Closed – Won"?"bg-gray-900 dark:bg-gray-100":e==="Closed – Lost"?"bg-white border-2 border-gray-900 dark:bg-gray-900 dark:border-gray-100":"bg-gray-400 dark:bg-gray-500",se=e=>h.value.filter(t=>(t.leadStage||t.status)===e),be=e=>{if(!e)return"";let t=e;!t.endsWith("Z")&&!t.includes("+")&&(t=e+"Z");const a=new Date(t),n=new Date().getTime()-a.getTime();return n<0||n<60*1e3?"Just now":n<60*60*1e3?`${Math.floor(n/(60*1e3))}m ago`:n<24*60*60*1e3?`${Math.floor(n/(60*60*1e3))}h ago`:n<7*24*60*60*1e3?`${Math.floor(n/(24*60*60*1e3))}d ago`:a.toLocaleDateString("en-IN",{timeZone:"Asia/Kolkata"})},qe=e=>{if(!e)return"";let t=e;return!t.endsWith("Z")&&!t.includes("+")&&(t=e+"Z"),new Date(t).toLocaleString("en-IN",{timeZone:"Asia/Kolkata",dateStyle:"medium",timeStyle:"short"})},oe=()=>{T.value=!0},We=()=>{T.value=!1},le=e=>{L.value=e,Ee.value=Te(e.notes),Ie.value=!1},S=async()=>{try{G.value=!0;const e=await Pe.post("https://api.huskyvoice.ai/contacts/get-contacts",{page:m.value,limit:N.value==="kanban"?50:I.value,search:B.value,sortBy:"lastActivity.timestamp",status:J.value,email:De.getEmail()});h.value=e.data.data||[],e.data.pagination&&(U.value=e.data.pagination.totalPages||1,E.value=e.data.pagination.totalCount||0,I.value=e.data.pagination.limit||10)}catch(e){console.error("Failed to fetch contacts:",e),h.value=[],U.value=1,E.value=0}finally{G.value=!1}},he=()=>{Q.value=null,K.value=!0},fe=e=>{Q.value=e,K.value=!0},Ze=async()=>{var t,a;const e=(t=Q.value)==null?void 0:t._id;if(await S(),e&&((a=L.value)==null?void 0:a._id)===e){const l=h.value.find(n=>n._id===e);l&&(L.value=l)}},Ge=/^\+[1-9]\d{6,14}$/,ke=e=>(e||"").replace(/[\s\-()]/g,""),O=(e,t)=>e.find(a=>t.includes(a.toLowerCase().replace(/[_\s]/g,""))),_e=e=>e.name?e.phone?Ge.test(e.phone)?"":"Phone must include a country code, e.g. +14155552671":"Phone is required":"Name is required",ne=e=>{e.phone=ke(e.phone),e.error=_e(e)},Je=e=>{$.value.splice(e,1)},ie=F(()=>$.value.filter(e=>!e.error).length),Ke=()=>{H.value=null,$.value=[],M.value=!0},Qe=e=>{var a;const t=(a=e.target.files)==null?void 0:a[0];t&&(H.value=t,Pt.parse(t,{header:!0,skipEmptyLines:!0,complete:l=>{const n=l.meta.fields||[],f=O(n,["name","contactname","fullname","username"]),p=O(n,["email","contactemail","useremail"]),k=O(n,["phone","phonenumber","mobile","mobilenumber","contact","contactnumber","usernumber"]),V=O(n,["company","organization","org"]),A=O(n,["position","title","jobtitle"]);if(!f&&!p&&!k){D({title:"Unrecognized CSV format",description:"Could not find a Name, Email, or Phone column. Check the header row.",variant:"destructive"}),$.value=[];return}$.value=l.data.map(_=>{var w,Y,j,P;const R={name:((w=f?_[f]:"")==null?void 0:w.trim())||"",email:((Y=p?_[p]:"")==null?void 0:Y.trim())||"",phone:ke(k?_[k]:""),company:((j=V?_[V]:"")==null?void 0:j.trim())||"",position:((P=A?_[A]:"")==null?void 0:P.trim())||"",error:""};return R.error=_e(R),R})},error:l=>{D({title:"Error",description:`Failed to parse CSV: ${l.message}`,variant:"destructive"})}}))},He=()=>{const e=`name,email,phone,company,position
3Jane Doe,[email protected],+14155552671,Acme Inc,Manager
4`,t=new Blob([e],{type:"text/csv"}
4),a=URL.createObjectURL(t),l=document.createElement("a");l.href=a,l.download="contacts_sample.csv",l.click(),URL.revokeObjectURL(a)},Xe=(e,t)=>{const a=[];for(let l=0;l<e.length;l+=t)a.push(e.slice(l,l+t));return a},Ye=async()=>{var n,f,p,k,V,A,_,R;const e=$.value.filter(w=>!w.error);if(e.length===0){D({title:"Nothing to import",description:"Fix the errors above or add at least one valid row.",variant:"destructive"});return}X.value=!0;let t=0,a=0,l=0;try{const w=Xe(e,200);for(const Y of w){const j=await Pe.post("https://api.huskyvoice.ai/contacts/bulk-import",{email:De.getEmail(),contacts:Y.map(P=>({name:P.name,contactEmail:P.email,phone:P.phone,company:P.company,position:P.position}))});t+=((f=(n=j.data)==null?void 0:n.data)==null?void 0:f.added)||0,a+=((k=(p=j.data)==null?void 0:p.data)==null?void 0:k.skipped)||0,l+=((A=(V=j.data)==null?void 0:V.data)==null?void 0:A.failed)||0}D({title:"Import complete",description:`${t} contact${t===1?"":"s"} imported`+(a?`, ${a} skipped (duplicate)`:"")+(l?`, ${l} failed`:"")+"."}),M.value=!1,await S()}catch(w){console.error("Failed to import contacts:",w),D({title:"Error",description:((R=(_=w==null?void 0:w.response)==null?void 0:_.data)==null?void 0:R.error)||"Failed to import contacts. Please try again.",variant:"destructive"})}finally{X.value=!1}},et=(e,t,a)=>{e&&Ue(e,t,a)},tt=e=>{if(!(e!=null&&e.phone)){D({title:"No Phone Number",description:"This contact has no phone number to schedule a call for.",variant:"warning"});return}ue.value=x(e)?"":e.name||"",ye.value=e.phone,ae.value=!0},at=()=>{if(!h.value.length){D({title:"No Data",description:"No contacts to export.",variant:"warning"});return}const e=["Name","Email","Phone","Company","Position","Lead Stage","Lead Source","Last Activity"],t=h.value.map(p=>{var k;return[p.name||"",p.email||"",p.phone||"",p.company||"",p.position||"",p.leadStage||p.status||"",p.leadSource||"",(k=p.lastActivity)!=null&&k.timestamp?qe(p.lastActivity.timestamp):""]}),a=[e,...t].map((p,k)=>p.map((V,A)=>{const _=String(V).replace(/"/g,'""');return k>0&&A===2&&V?`="${_}"`:`"${_}"`}).join(",")).join(`
5`),l=new Blob([a],{type:"text/csv;charset=utf-8;"}),n=URL.createObjectURL(l),f=document.createElement("a");f.href=n,f.download=`contacts_${new Date().toISOString().split("T")[0]}.csv`,f.click(),URL.revokeObjectURL(n)},rt=()=>{m.value>1&&(m.value--,S())},st=()=>{m.value<U.value&&(m.value++,S())},ot=()=>{m.value=1,S()},lt=()=>{m.value=U.value,S()};return we([B,J],()=>{m.value=1,S()}),we(N,()=>{m.value=1,S()}),dt(()=>{S()}),(e,t)=>(d(),u("div",jt,[(d(),ee(gt,{to:"#header-title-extra"},[s(o(de),{variant:"outline",class:"text-xs px-2 py-0.5"},{default:i(()=>[v(g(E.value)+" Calls ",1)]),_:1})])),s(Vt,null,{search:i(()=>[r("div",Ft,[s(o(ut),{class:"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-gray-400"}),s(o(q),{modelValue:B.value,"onUpdate:modelValue":t[0]||(t[0]=a=>B.value=a),placeholder:"Search contacts...",class:"pl-8 h-8 text-sm"},null,8,["modelValue"])])]),filters:i(()=>[s(o(Ce),{modelValue:J.value,"onUpdate:modelValue":t[1]||(t[1]=a=>J.value=a)},{default:i(()=>[s(o($e),{class:"w-36 h-8 text-sm"},{default:i(()=>[s(o(Se),{placeholder:"Status"})]),_:1}),s(o(Ne),null,{default:i(()=>[s(o(z),{value:"all"},{default:i(()=>t[11]||(t[11]=[v("All Status")])),_:1}),(d(),u(W,null,Z(xe,a=>s(o(z),{key:a,value:a},{default:i(()=>[v(g(a),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])]),"view-toggle":i(()=>[r("div",zt,[s(o(c),{onClick:t[2]||(t[2]=a=>N.value="table"),variant:"ghost",size:"sm",class:C(["h-8 px-2 rounded-r-none",N.value==="table"?"bg-gray-900 text-white dark:bg-gray-100 dark:text-gray-900 hover:bg-gray-800 dark:hover:bg-gray-200":"text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700"])},{default:i(()=>[s(o(Dt),{class:"h-3.5 w-3.5"})]),_:1},8,["class"]),s(o(c),{onClick:t[3]||(t[3]=a=>N.value="kanban"),variant:"ghost",size:"sm",class:C(["h-8 px-2 rounded-l-none border-l dark:border-gray-600",N.value==="kanban"?"bg-gray-900 text-white dark:bg-gray-100 dark:text-gray-900 hover:bg-gray-800 dark:hover:bg-gray-200":"text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700"])},{default:i(()=>[s(o(Lt),{class:"h-3.5 w-3.5"})]),_:1},8,["class"])])]),actions:i(()=>[s(o(c),{onClick:at,variant:"outline",size:"sm",class:"h-8 px-3"},{default:i(()=>[s(o(Ut),{class:"h-3.5 w-3.5 mr-1.5"}),t[12]||(t[12]=v(" Export "))]),_:1}),s(o(c),{onClick:Ke,variant:"outline",size:"sm",class:"h-8 px-3"},{default:i(()=>[s(o(At),{class:"h-3.5 w-3.5 mr-1.5"}),t[13]||(t[13]=v(" Import "))]),_:1}),s(o(c),{onClick:he,size:"sm",class:"h-8 px-3 bg-gray-900 dark:bg-gray-100 hover:bg-gray-800 dark:hover:bg-gray-200 text-white dark:text-gray-900"},{default:i(()=>[s(o(Ve),{class:"h-3.5 w-3.5 mr-1.5"}),t[14]||(t[14]=v(" New Contact "))]),_:1})]),_:1}),r("div",Bt,[r("div",{class:C([["flex-1 min-h-0 overflow-auto bg-gray-50 dark:bg-gray-900",T.value?"mr-[380px]":""],"transition-all duration-300"])},[N.value==="table"?(d(),u("div",Tt,[G.value?(d(),u("div",Mt,[s(o(ge),{class:"animate-spin h-12 w-12 text-gray-900 dark:text-gray-100"})])):(d(),u("div",Ot,[r("table",qt,[t[15]||(t[15]=r("thead",{class:"bg-gray-50/50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600"},[r("tr",null,[r("th",{class:"px-3 py-2.5 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wide"},"Name "),r("th",{class:"px-3 py-2.5 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wide"},"Phone "),r("th",{class:"px-3 py-2.5 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wide"},"Company "),r("th",{class:"px-3 py-2.5 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wide"},"Email "),r("th",{class:"px-3 py-2.5 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wide"},"Status "),r("th",{class:"px-3 py-2.5 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wide"},"Activity "),r("th",{class:"px-3 py-2.5 text-right text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wide sticky right-0 bg-gray-50/50 dark:bg-gray-700"}," Actions")])],-1)),r("tbody",Wt,[(d(!0),u(W,null,Z(Fe.value,a=>{var l;return d(),u("tr",{key:a.id,onClick:n=>le(a),class:C(["hover:bg-gray-50/50 dark:hover:bg-gray-700/50 cursor-pointer transition-colors group",((l=L.value)==null?void 0:l.id)===a.id?"bg-white dark:bg-gray-800":""])},[r("td",Gt,[r("div",Jt,[r("div",{class:C(["w-5 h-5 rounded-md border flex items-center justify-center text-[10px] font-semibold flex-shrink-0",x(a)?"bg-gray-200 border-gray-300 text-gray-400 dark:bg-gray-700 dark:border-gray-600 dark:text-gray-500":"bg-gray-100 border-gray-300 text-gray-700 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300"])},g(x(a)?"?":ce(a.name)),3),r("div",Kt,[r("div",{class:C(["text-sm font-medium truncate",x(a)?"text-gray-400 dark:text-gray-500 italic":"text-gray-900 dark:text-gray-100"])},g(me(a)),3),a.company?(d(),u("div",Qt,g(re(a)),1)):b("",!0)])])]),r("td",Ht,[r("div",Xt,g(Be(a)||"—"),1)]),r("td",Yt,[r("div",ea,g(re(a)||"—"),1)]),r("td",ta,[r("div",aa,g(ze(a)),1)]),r("td",ra,[s(o(de),{class:C([x(a)?"bg-gray-200 border-gray-300 text-gray-400 dark:bg-gray-700 dark:border-gray-600 dark:text-gray-500":Me(a.leadStage||a.status),"font-medium text-xs px-2 py-0.5"])},{default:i(()=>[v(g(a.leadStage||a.status),1)]),_:2},1032,["class"])]),r("td",sa,[a.lastActivity?(d(),u("div",oa,[r("div",la,g(ve(a.lastActivity)),1),r("div",na,g(be(a.lastActivity.timestamp||a.lastActivity)),1)])):(d(),u("div",ia,"No activity"))]),r("td",da,[r("div",ga,[s(o(c),{onClick:te(n=>et(a.phone,a.name,a.email),["stop"]),variant:"ghost",size:"sm",title:"Call",class:"h-7 w-7 p-0 hover:bg-gray-100 dark:hover:bg-gray-700"},{default:i(()=>[s(o(yt),{class:"h-3.5 w-3.5 text-gray-500 dark:text-gray-400"})]),_:2},1032,["onClick"]),s(o(c),{onClick:te(n=>tt(a),["stop"]),variant:"ghost",size:"sm",title:"Schedule Call",class:"h-7 w-7 p-0 hover:bg-gray-100 dark:hover:bg-gray-700"},{default:i(()=>[s(o(It),{class:"h-3.5 w-3.5 text-gray-500 dark:text-gray-400"})]),_:2},1032,["onClick"]),s(o(c),{onClick:te(n=>fe(a),["stop"]),variant:"ghost",size:"sm",title:"Edit",class:"h-7 w-7 p-0 hover:bg-gray-100 dark:hover:bg-gray-700"},{default:i(()=>[s(o(Et),{class:"h-3.5 w-3.5 text-gray-500 dark:text-gray-400"})]),_:2},1032,["onClick"]),s(o(c),{onClick:te(n=>{le(a),oe()},["stop"]),variant:"ghost",size:"sm",title:"View Details",class:"h-7 w-7 p-0 hover:bg-gray-100 dark:hover:bg-gray-700"},{default:i(()=>[s(o(Le),{class:"h-3.5 w-3.5 text-gray-900 dark:text-gray-100"})]),_:2},1032,["onClick"])])])],10,Zt)}),128))])]),h.value.length?b("",!0):(d(),u("div",ua,[r("div",ya,[s(o(pt),{class:"h-10 w-10 text-white dark:text-gray-900"})]),t[17]||(t[17]=r("p",{class:"text-gray-900 dark:text-gray-100 font-semibold text-lg mb-2"},"No contacts found",-1)),t[18]||(t[18]=r("p",{class:"text-sm text-gray-500 dark:text-gray-400 mb-6"},"Try adjusting your filters or add a new contact to get started",-1)),B.value?b("",!0):(d(),ee(o(c),{key:0,onClick:he,class:"bg-gray-900 dark:bg-gray-100 hover:bg-gray-800 dark:hover:bg-gray-200 text-white dark:text-gray-900"},{default:i(()=>[s(o(Ve),{class:"h-4 w-4 mr-2"}),t[16]||(t[16]=v(" Add Your First Contact "))]),_:1}))]))])),E.value>0?(d(),u("div",pa,[r("div",ca,[t[23]||(t[23]=r("span",{class:"text-sm text-gray-700"},"Rows per page:",-1)),s(o(Ce),{modelValue:I.value,"onUpdate:modelValue":[t[4]||(t[4]=a=>I.value=a),t[5]||(t[5]=a=>{m.value=1,S()})]},{default:i(()=>[s(o($e),{class:"w-20"},{default:i(()=>[s(o(Se))]),_:1}),s(o(Ne),null,{default:i(()=>[s(o(z),{value:10},{default:i(()=>t[19]||(t[19]=[v("10")])),_:1}),s(o(z),{value:25},{default:i(()=>t[20]||(t[20]=[v("25")])),_:1}),s(o(z),{value:50},{default:i(()=>t[21]||(t[21]=[v("50")])),_:1}),s(o(z),{value:100},{default:i(()=>t[22]||(t[22]=[v("100")])),_:1})]),_:1})]),_:1},8,["modelValue"])]),r("div",ma,[r("span",va,g(Re.value+1)+"-"+g(je.value)+" of "+g(E.value),1),r("div",xa,[s(o(c),{onClick:ot,disabled:m.value===1,variant:"outline",size:"sm"},{default:i(()=>[s(o(Ct),{class:"h-4 w-4"})]),_:1},8,["disabled"]),s(o(c),{onClick:rt,disabled:m.value===1,variant:"outline",size:"sm"},{default:i(()=>[s(o(Rt),{class:"h-4 w-4"})]),_:1},8,["disabled"]),r("span",ba,"Page "+g(m.value)+" of "+g(U.value),1),s(o(c),{onClick:st,disabled:m.value===U.value,variant:"outline",size:"sm"},{default:i(()=>[s(o(ct),{class:"h-4 w-4"})]),_:1},8,["disabled"]),s(o(c),{onClick:lt,disabled:m.value===U.value,variant:"outline",size:"sm"},{default:i(()=>[s(o($t),{class:"h-4 w-4"})]),_:1},8,["disabled"])])])])):b("",!0)])):N.value==="kanban"?(d(),u("div",ha,[G.value?(d(),u("div",fa,[s(o(ge),{class:"animate-spin h-12 w-12 text-gray-900 dark:text-gray-100"})])):(d(),u("div",ka,[(d(),u(W,null,Z(xe,a=>r("div",{key:a,class:"flex-shrink-0 w-72 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm flex flex-col",style:{"max-height":"calc(100vh - 280px)"}},[r("div",_a,[r("div",wa,[r("div",{class:C(["w-2.5 h-2.5 rounded-full flex-shrink-0",Oe(a)])},null,2),r("h3",Ca,g(a),1),s(o(de),{variant:"secondary",class:"text-xs"},{default:i(()=>[v(g(se(a).length),1)]),_:2},1024)])]),r("div",$a,[(d(!0),u(W,null,Z(se(a),l=>{var n;return d(),u("div",{key:l.id,onClick:f=>{le(l),oe()},class:"bg-gray-50 dark:bg-gray-900 rounded-lg p-3 border border-gray-200 dark:border-gray-700 hover:border-gray-900 dark:hover:border-gray-100 hover:bg-white dark:hover:bg-gray-800 transition-all cursor-pointer group"},[r("div",Na,[r("div",{class:C(["w-5 h-5 rounded-md border flex items-center justify-center text-[10px] font-semibold flex-shrink-0",x(l)?"bg-gray-200 border-gray-300 text-gray-400 dark:bg-gray-700 dark:border-gray-600 dark:text-gray-500":"bg-gray-100 border-gray-300 text-gray-700 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300"])},g(x(l)?"?":ce(l.name)),3),r("div",Va,[r("p",{class:C(["font-semibold text-sm truncate group-hover:text-gray-700 dark:group-hover:text-gray-200 transition-colors",x(l)?"text-gray-400 dark:text-gray-500 italic":"text-gray-900 dark:text-gray-100"])},g(me(l)),3),r("p",Pa,g(re(l)||"No company"),1)])]),l.lastActivity?(d(),u("div",Da,g(ve(l.lastActivity))+" · "+g(be(((n=l.lastActivity)==null?void 0:n.timestamp)||l.lastActivity)),1)):b("",!0)],8,Sa)}),128)),se(a).length===0?(d(),u("div",La," No contacts ")):b("",!0)])])),64))]))])):b("",!0)],2),s(St,{open:T.value&&!!L.value,contact:L.value,onClose:We,onEdit:fe},null,8,["open","contact"])]),L.value&&!T.value?(d(),ee(o(c),{key:0,onClick:oe,class:"fixed right-8 bottom-8 rounded-full w-14 h-14 bg-gray-900 dark:bg-gray-100 hover:bg-gray-800 dark:hover:bg-gray-200 text-white dark:text-gray-900 shadow-xl hover:shadow-2xl transition-all z-40",title:"View Conversations"},{default:i(()=>[s(o(Le),{class:"h-6 w-6"})]),_:1})):b("",!0),s(Nt,{open:K.value,"onUpdate:open":t[6]||(t[6]=a=>K.value=a),contact:Q.value,onSaved:Ze},null,8,["open","contact"]),s(o(ft),{open:M.value,"onUpdate:open":t[9]||(t[9]=a=>M.value=a)},{default:i(()=>[s(o(mt),{class:"max-w-4xl max-h-[90vh] overflow-y-auto"},{default:i(()=>[s(o(vt),null,{default:i(()=>[s(o(xt),null,{default:i(()=>t[24]||(t[24]=[v("Import Contacts")])),_:1})]),_:1}),r("div",Ua,[r("div",Aa,[r("div",Ia,[r("input",{ref_key:"importFileInput",ref:pe,type:"file",accept:".csv",class:"hidden",onChange:Qe},null,544),s(o(c),{type:"button",variant:"outline",size:"sm",onClick:t[7]||(t[7]=a=>{var l;return(l=pe.value)==null?void 0:l.click()})},{default:i(()=>t[25]||(t[25]=[v(" Choose CSV File ")])),_:1}),H.value?(d(),u("span",Ea,g(H.value.name),1)):b("",!0)]),r("button",{type:"button",class:"text-sm text-gray-500 underline hover:text-gray-700",onClick:He}," Download sample CSV ")]),t[27]||(t[27]=r("p",{class:"text-xs text-gray-500"}," Columns are matched by header name (Name, Email, Phone, Company, Position). Name and Phone are required for every row — rows missing either, or with a badly formatted phone number, are flagged below. Fix them inline or remove the row. Rows whose email already matches an existing contact are skipped automatically. ",-1)),$.value.length>0?(d(),u("div",Ra,[r("div",ja,[r("table",Fa,[t[26]||(t[26]=r("thead",{class:"bg-gray-50 dark:bg-gray-800 sticky top-0"},[r("tr",null,[r("th",{class:"text-left px-3 py-2 font-medium"},"Name"),r("th",{class:"text-left px-3 py-2 font-medium"},"Phone"),r("th",{class:"text-left px-3 py-2 font-medium"},"Company"),r("th",{class:"text-left px-3 py-2 font-medium"},"Email"),r("th",{class:"px-3 py-2"})])],-1)),r("tbody",null,[(d(!0),u(W,null,Z($.value,(a,l)=>(d(),u("tr",{key:l,class:C([a.error?"bg-red-50 dark:bg-red-950/30":"","border-t border-gray-200 dark:border-gray-700"])},[r("td",za,[s(o(q),{modelValue:a.name,"onUpdate:modelValue":n=>a.name=n,class:"h-7 text-sm",onBlur:n=>ne(a)},null,8,["modelValue","onUpdate:modelValue","onBlur"])]),r("td",Ba,[s(o(q),{modelValue:a.phone,"onUpdate:modelValue":n=>a.phone=n,class:"h-7 text-sm",placeholder:"+14155552671",onBlur:n=>ne(a)},null,8,["modelValue","onUpdate:modelValue","onBlur"])]),r("td",Ta,[s(o(q),{modelValue:a.company,"onUpdate:modelValue":n=>a.company=n,class:"h-7 text-sm"},null,8,["modelValue","onUpdate:modelValue"])]),r("td",Ma,[s(o(q),{modelValue:a.email,"onUpdate:modelValue":n=>a.email=n,class:"h-7 text-sm",onBlur:n=>ne(a)},null,8,["modelValue","onUpdate:modelValue","onBlur"])]),r("td",Oa,[r("button",{type:"button",class:"text-gray-400 hover:text-red-600",onClick:n=>Je(l)},[s(o(bt),{class:"h-3.5 w-3.5"})],8,qa)])],2))),128))])])]),$.value.some(a=>a.error)?(d(),u("div",Wa,g($.value.filter(a=>a.error).length)+" row(s) have errors and won't be imported until fixed or removed. ",1)):b("",!0)])):b("",!0)]),s(o(ht),null,{default:i(()=>[s(o(c),{onClick:t[8]||(t[8]=a=>M.value=!1),type:"button",variant:"outline"},{default:i(()=>t[28]||(t[28]=[v("Cancel")])),_:1}),s(o(c),{type:"button",disabled:ie.value===0||X.value,class:"bg-gray-900 dark:bg-gray-100 hover:bg-gray-800 dark:hover:bg-gray-200 text-white",onClick:Ye},{default:i(()=>[X.value?(d(),ee(o(ge),{key:0,class:"h-3.5 w-3.5 mr-1.5 animate-spin"})):b("",!0),v(" Import "+g(ie.value)+" Contact"+g(ie.value===1?"":"s"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"]),s(wt,{open:ae.value,"onUpdate:open":t[10]||(t[10]=a=>ae.value=a),"prefill-name":ue.v
5alue,"prefill-phone":ye.value},null,8,["open","prefill-name","prefill-phone"])]))}}),cr=_t(Za,[["__scopeId","data-v-2e5a2ee9"]]);export{cr 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.