PageSourceSearch

https://slickbot.ai/assets/AdminVoiceSettingsPage-CNeAOoPL.js

js slickbot.ai collected 2026-10-05 14:28:49 UTC 21,421 bytes, 1 lines download raw bytes

1import{d as W,u as v,b as D,j as e}from"./vendor-query-DPZO-Gta.js";import{r as g,L as I}from"./vendor-react-BomFe3BT.js";import{W as i,z as r}from"./index-BLzMsaFd.js";import{c as d}from"./vendor-charts-DodUWJ0z.js";function G(){const u=W(),[x,F]=g.useState("config"),[h,L]=g.useState(1),[y,U]=g.useState(1),[l,T]=g.useState("dev"),[R,p]=g.useState(null),[j,N]=g.useState(""),{data:w}=v({queryKey:["admin-voice-stats"],queryFn:()=>i.getStats()}),{data:_,isLoading:q}=v({queryKey:["admin-voice-config"],queryFn:()=>i.getConfig()}),{data:k}=v({queryKey:["admin-voice-webhooks",l],queryFn:()=>i.getWebhooks(l)}),{data:C,isLoading:E}=v({queryKey:["admin-voice-sessions",h],queryFn:()=>i.listSessions({page:h,per_page:20}),enabled:x==="sessions"}),{data:S,isLoading:V}=v({queryKey:["admin-voice-phones",y],queryFn:()=>i.listPhoneNumbers({page:y,per_page:20}),enabled:x==="phones"}),b=w==null?void 0:w.data,s=_==null?void 0:_.data,a=k==null?void 0:k.data,o=C==null?void 0:C.data,c=S==null?void 0:S.data,P=D({mutationFn:t=>i.updateConfig(t),onSuccess:()=>{r.success("Configuration updated"),u.invalidateQueries({queryKey:["admin-voice-config"]})},onError:()=>{r.error("Failed to update configuration")}}),M=t=>{navigator.clipboard.writeText(t),r.success("Copied to clipboard")},K=t=>{if(!t)return"-";const n=Math.floor(t/60),m=t%60;return`${n}:${String(m).padStart(2,"0")}`};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-gray-900",children:"Voice Settings"}),e.jsx("p",{className:"text-gray-500 mt-1",children:"Platform-wide voice configuration and monitoring"})]}),e.jsx(I,{to:"/admin",className:"px-4 py-2 text-gray-600 hover:text-gray-900",children:"Back to Dashboard"})]}),b&&e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 p-4",children:[e.jsx("p",{className:"text-sm text-gray-500",children:"Total Sessions"}),e.jsx("p",{className:"text-2xl font-bold text-gray-900",children:b.total_voice_sessions.toLocaleString()})]}),e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 p-4",children:[e.jsx("p",{className:"text-sm text-gray-500",children:"Total Minutes"}),e.jsx("p",{className:"text-2xl font-bold text-gray-900",children:b.total_duration_minutes.toLocaleString()})]}),e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 p-4",children:[e.jsx("p",{className:"text-sm text-gray-500",children:"Voice Bots"}),e.jsx("p",{className:"text-2xl font-bold text-gray-900",children:b.voice_enabled_chatbots})]}),e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 p-4",children:[e.jsx("p",{className:"text-sm text-gray-500",children:"Phone Numbers"}),e.jsx("p",{className:"text-2xl font-bold text-gray-900",children:b.phone_numbers.active})]})]}),e.jsx("div",{className:"border-b border-gray-200",children:e.jsx("nav",{className:"-mb-px flex space-x-8",children:[{key:"config",label:"Configuration"},{key:"webhooks",label:"Webhook URLs"},{key:"sessions",label:"Voice Sessions"},{key:"phones",label:"Phone Numbers"}].map(t=>e.jsx("button",{onClick:()=>F(t.key),className:d("py-4 px-1 border-b-2 font-medium text-sm",x===t.key?"border-primary-500 text-primary-600":"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300"),children:t.label},t.key))})}),x==="config"&&e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 p-6",children:[e.jsx("h3",{className:"text-lg font-medium text-gray-900 mb-4",children:"Integration Status"}),q?e.jsxs("div",{className:"animate-pulse space-y-3",children:[e.jsx("div",{className:"h-4 bg-gray-200 rounded w-1/2"}),e.jsx("div",{className:"h-4 bg-gray-200 rounded w-1/3"})]}):s&&e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"flex items-center justify-between p-3 bg-gray-50 rounded-lg",children:[e.jsx("span",{className:"text-sm text-gray-700",children:"VAPI API Key"}),e.jsx("span",{className:d("px-2 py-1 text-xs rounded-full",s.vapi_configured?"bg-green-100 text-green-700":"bg-red-100 text-red-700"),children:s.vapi_configured?"Configured":"Not Set"})]}),e.jsxs("div",{className:"flex items-center justify-between p-3 bg-gray-50 rounded-lg",children:[e.jsx("span",{className:"text-sm text-gray-700",children:"VAPI Public Key"}),e.jsx("span",{className:d("px-2 py-1 text-xs rounded-full",s.vapi_public_key_configured?"bg-green-100 text-green-700":"bg-red-100 text-red-700"),children:s.vapi_public_key_configured?"Configured":"Not Set"})]}),e.jsxs("div",{className:"flex items-center justify-between p-3 bg-gray-50 rounded-lg",children:[e.jsx("span",{className:"text-sm text-gray-700",children:"Twilio Credentials"}),e.jsx("span",{className:d("px-2 py-1 text-xs rounded-full",s.twilio_configured?"bg-green-100 text-green-700":"bg-yellow-100 text-yellow-700"),children:s.twilio_configured?"Configured":"Optional"})]}),e.jsxs("div",{className:"flex items-center justify-between p-3 bg-gray-50 rounded-lg",children:[e.jsx("span",{className:"text-sm text-gray-700",children:"Twilio Phone Number"}),e.jsx("span",{className:d("px-2 py-1 text-xs rounded-full",s.twilio_phone_configured?"bg-green-100 text-green-700":"bg-yellow-100 text-yellow-700"),children:s.twilio_phone_configured?"Configured":"Optional"})]})]})]}),s&&e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 p-6",children:[e.jsx("h3",{className:"text-lg font-medium text-gray-900 mb-4",children:"Default Settings"}),e.jsxs("div",{className:"grid grid-cols-2 gap-6",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Default TTS Voice"}),e.jsxs("select",{value:s.defaults.voice_tts_voice,onChange:t=>P.mutate({voice_tts_voice:t.target.value}),className:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500",children:[e.jsx("option",{value:"alloy",children:"Alloy"}),e.jsx("option",{value:"echo",children:"Echo"}),e.jsx("option",{value:"fable",children:"Fable"}),e.jsx("option",{value:"onyx",children:"Onyx"}),e.jsx("option",{value:"nova",children:"Nova"}),e.jsx("option",{value:"shimmer",children:"Shimmer"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Default LLM Model"}),e.jsx("input",{type:"text",value:s.defaults.voice_llm_model,onChange:t=>P.mutate({voice_llm_model:t.target.value}),className:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"STT Provider"}),e.jsx("input",{type:"text",value:s.defaults.voice_stt_provider,disabled:!0,className:"w-full px-3 py-2 border border-gray-300 rounded-lg bg-gray-50 text-gray-500"}),e.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Set via environment variable"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Recording Retention (days)"}),e.jsx("input",{type:"number",value:s.defaults.voice_recording_retention_days,onChange:t=>P.mutate({voice_recording_retention_days:parseInt(t.target.value)}),className:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500"})]})]}),e.jsx("div",{className:"mt-4 p-3 bg-yellow-50 border border-yellow-200 rounded-lg",children:e.jsx("p",{className:"text-sm text-yellow-700",children:"Note: Changes here are in-memory only and will reset on server restart. For permanent changes, update the environment variables."})})]})]}),x==="webhooks"&&a&&e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 p-6",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-medium text-gray-900",children:"Webhook URLs"}),e.jsx("p",{className:"text-sm text-gray-500 mt-1",children:"Configure these URLs in your VAPI and Twilio dashboards."})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm text-gray-500",children:"Environment:"}
1),e.jsxs("select",{value:l,onChange:t=>T(t.target.value),className:"px-3 py-1.5 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-primary-500",children:[e.jsx("option",{value:"dev",children:"Development"}),e.jsx("option",{value:"prod",children:"Production"})]})]})]}),e.jsxs("div",{className:"mb-4 p-3 bg-gray-50 rounded-lg",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsxs("span",{className:"text-gray-600",children:[e.jsx("span",{className:d("inline-block w-2 h-2 rounded-full mr-2",l==="prod"?"bg-green-500":"bg-yellow-500")}),l==="prod"?"Production":"Development"," Base URL:"]}),e.jsx("code",{className:"bg-white px-2 py-1 rounded border border-gray-200",children:a.base_url})]}),a.available_environments&&e.jsxs("div",{className:"mt-3 pt-3 border-t border-gray-200 space-y-2",children:[e.jsx("p",{className:"text-xs font-medium text-gray-600 mb-2",children:"Base URLs (click to edit):"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs text-gray-500 w-12",children:"Dev:"}),R==="dev"?e.jsxs("div",{className:"flex-1 flex items-center gap-2",children:[e.jsx("input",{type:"text",value:j,onChange:t=>N(t.target.value),className:"flex-1 px-2 py-1 text-xs border border-gray-300 rounded focus:ring-2 focus:ring-primary-500",placeholder:"http://your-server:port",autoFocus:!0}),e.jsx("button",{onClick:async()=>
1{try{await i.setWebhookBaseUrl("dev",j),u.invalidateQueries({queryKey:["admin-voice-webhooks"]}),r.success("Dev URL updated"),p(null)}catch{r.error("Failed to update URL")}},className:"px-2 py-1 bg-primary-600 text-white text-xs rounded hover:bg-primary-700",children:"Save"}),e.jsx("button",{onClick:()=>p(null),className:"px-2 py-1 text-gray-600 text-xs hover:text-gray-900",children:"Cancel"})]}):e.jsx("button",{onClick:()=>{N(a.available_environments.dev),p("dev")},className:"flex-1 text-left text-xs text-gray-700 hover:text-primary-600 hover:underline",children:a.available_environments.dev})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs text-gray-500 w-12",children:"Prod:"}),R==="prod"?e.jsxs("div",{className:"flex-1 flex items-center gap-2",children:[e.jsx("input",{type:"text",value:j,onChange:t=>N(t.target.value),className:"flex-1 px-2 py-1 text-xs border border-gray-300 rounded focus:ring-2 focus:ring-primary-500",placeholder:"https://your-domain.com",autoFocus:!0}),e.jsx("button",{onClick:async()=>
1{try{await i.setWebhookBaseUrl("prod",j),u.invalidateQueries({queryKey:["admin-voice-webhooks"]}),r.success("Prod URL updated"),p(null)}catch{r.error("Failed to update URL")}},className:"px-2 py-1 bg-primary-600 text-white text-xs rounded hover:bg-primary-700",children:"Save"}),e.jsx("button",{onClick:()=>p(null),className:"px-2 py-1 text-gray-600 text-xs hover:text-gray-900",children:"Cancel"})]}):e.jsx("button",{onClick:()=>{N(a.available_environments.prod),p("prod")},className:"flex-1 text-left text-xs text-gray-700 hover:text-primary-600 hover:underline",children:a.available_environments.prod})]})]}),e.jsxs("div",{className:"mt-3 pt-3 border-t border-gray-200 flex items-center justify-between",children:[e.jsxs("div",{className:"text-sm",children:[e.jsx("span",{className:"text-gray-600",children:"Active Environment: "}),e.jsx("span",{className:d("font-medium",a.active_environment==="prod"?"text-green-600":"text-yellow-600"),children:a.active_environment==="prod"?"Production":"Development"})]}),l!==a.active_environment&&e.jsxs("button",{onClick:async()=>{try{await i.setWebhookEnvironment(l),u.invalidateQueries({queryKey:["admin-voice-webhooks"]}),r.success(`Webhook environment set to ${l}`)}catch{r.error("Failed to set webhook environment")}},className:"px-3 py-1 bg-primary-600 text-white text-sm rounded-lg hover:bg-primary-700",children:["Use ",l==="prod"?"Production":"Development"," URLs"]}),l===a.active_environment&&e.jsxs("span",{className:"text-xs text-green-600 flex items-center",children:[e.jsx("svg",{className:"w-4 h-4 mr-1",fill:"currentColor",viewBox:"0 0 20 20",children:e.jsx("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"})}),"Currently Active"]})]}),e.jsx("div",{className:"mt-3 pt-3 border-t border-gray-200",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"text-sm text-gray-600",children:[e.jsx("p",{className:"font-medium",children:"Sync Webhook URLs"}),e.jsx("p",{className:"text-xs text-gray-500",children:"Update all phone numbers in VAPI and Twilio to use the active environment's webhook URL"})]}),e.jsxs("button",{onClick:async()=>{var t,n,m,A;try{const f=(await i.syncWebhookUrls()).data;((n=(t=f.results)==null?void 0:t.failed)==null?void 0:n.length)>0?r.error(`Synced ${f.results.success.length}, failed ${f.results.failed.length}`):r.success(`Synced ${((A=(m=f.results)==null?void 0:m.success)==null?void 0:A.length)||0} phone numbers (VAPI & Twilio)`),u.invalidateQueries({queryKey:["admin-voice-webhooks"]})}catch{r.error("Failed to sync webhook URLs")}},className:"px-4 py-2 bg-blue-600 text-white text-sm rounded-lg hover:bg-blue-700 flex items-center gap-2",children:[e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"})}),"Sync All"]})]})})]}),e.jsx("div",{className:"space-y-4",children:Object.entries(a.webhooks).map(([t,n])=>e.jsxs("div",{className:"border border-gray-200 rounded-lg p-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("h4",{className:"font-medium text-gray-900 capitalize",children:t.replace(/_/g," ")}),e.jsx("button",{onClick:()=>M(n.url),className:"text-sm text-primary-600 hover:text-primary-700",children:"Copy URL"})]}),e.jsx("p",{className:"text-sm text-gray-500 mb-2",children:n.description}),e.jsx("code",{className:"block bg-gray-50 p-2 rounded text-sm text-gray-700 break-all",children:n.url}),n.events&&e.jsx("div",{className:"mt-2 flex flex-wrap gap-1",children:n.events.map(m=>e.jsx("span",{className:"px-2 py-0.5 text-xs bg-blue-100 text-blue-700 rounded",children:m},m))})]},t))})]}),x==="sessions"&&e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 overflow-hidden",children:[e.jsx("div",{className:"px-6 py-4 border-b border-gray-200",children:e.jsx("h3",{className:"text-lg font-medium text-gray-900",children:"Recent Voice Sessions"})}),E?e.jsx("div",{className:"p-8 text-center",children:e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary-600 mx-auto"})}):o&&o.sessions.length>0?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"min-w-full divide-y divide-gray-200",children:[e.jsx("thead",{className:"bg-gray-50",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Type"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Status"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Duration"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Phone"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Recording"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Date"})]})}),e.jsx("tbody",{className:"bg-white divide-y divide-gray-200",children:o.sessions.map(t=>e.jsxs("tr",{className:"hover:bg-gray-50",children:[e.jsx("td",{className:"px-6 py-4 whitespace-nowrap",children:e.jsx("span",{className:d("px-2 py-1 text-xs rounded-full",t.call_type==="web"&&"bg-blue-100 text-blue-700",t.call_type==="phone_inbound"&&"bg-green-100 text-green-700",t.call_type==="phone_outbound"&&"bg-purple-100 text-purple-700"),
1children:t.call_type})}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap",children:e.jsx("span",{className:d("px-2 py-1 text-xs rounded-full",t.status==="ended"&&"bg-gray-100 text-gray-700",t.status==="active"&&"bg-green-100 text-green-700",t.status==="failed"&&"bg-red-100 text-red-700"),children:t.status})}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-700",children:K(t.duration_seconds)}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-500",children:t.phone_number||"-"}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap",children:t.recording_url?e.jsx("span",{className:"text-green-600 text-sm",children:"Available"}):e.jsx("span",{className:"text-gray-400 text-sm",children:"-"})}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-500",children:new Date(t.created_at).toLocaleString()})]},t.id))})]})}),o.total_pages>1&&e.jsxs("div",{className:"px-6 py-4 border-t border-gray-200 flex items-center justify-between",children:[e.jsxs("div",{className:"text-sm text-gray-500",children:["Page ",h," of ",o.total_pages," (",o.total," total)"]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{onClick:()=>L(t=>Math.max(1,t-1)),disabled:h===1,className:"px-3 py-1 border border-gray-300 rounded-lg disabled:opacity-50 hover:bg-gray-50",children:"Previous"}),e.jsx("button",{onClick:()=>L(t=>Math.min(o.total_pages,t+1)),disabled:h===o.total_pages,className:"px-3 py-1 border border-gray-300 rounded-lg disabled:opacity-50 hover:bg-gray-50",children:"Next"})]})]})]}):e.jsx("div",{className:"p-8 text-center text-gray-500",children:"No voice sessions found"})]}),x==="phones"&&e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 overflow-hidden",children:[e.jsx("div",{className:"px-6 py-4 border-b border-gray-200",children:e.jsx("h3",{className:"text-lg font-medium text-gray-900",children:"All Phone Numbers"})}),V?e.jsx("div",{className:"p-8 text-center",children:e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary-600 mx-auto"})}):c&&c.phone_numbers.length>0?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"min-w-full divide-y divide-gray-200",children:[e.jsx("thead",{className:"bg-gray-50",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Number"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Location"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Status"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Owner"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Chatbot"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase",children:"Provider"})]})}),e.jsx("tbody",{className:"bg-white divide-y divide-gray-200",children:c.phone_numbers.map(t=>e.jsxs("tr",{className:"hover:bg-gray-50",children:[e.jsx("td",{className:"px-6 py-4 whitespace-nowrap",children:e.jsx("span",{className:"font-medium text-gray-900",children:t.phone_number})}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-500",children:t.locality&&t.region?`${t.locality}, ${t.region}`:t.country_code}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap",children:e.jsx("span",{className:d("px-2 py-1 text-xs rounded-full",t.status==="ACTIVE"&&"bg-green-100 text-green-700",t.status==="PENDING"&&"bg-yellow-100 text-yellow-700",t.status==="RELEASED"&&"bg-gray-100 text-gray-700"),children:t.status})}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-500",children:t.user_email||"-"}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-500",children:t.chatbot_name||e.jsx("span",{className:"text-gray-400",children:"Unassigned"})}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-500",children:t.provider})]},t.id))})]})}),c.total_pages>1&&e.jsxs("div",{className:"px-6 py-4 border-t border-gray-200 flex items-center justify-between",children:[e.jsxs("div",{className:"text-sm text-gray-500",children:["Page ",y," of ",c.total_pages," (",c.total," total)"]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{onClick:()=>U(t=>Math.max(1,t-1)),disabled:y===1,className:"px-3 py-1 border border-gray-300 rounded-lg disabled:opacity-50 hover:bg-gray-50",children:"Previous"}),e.jsx("button",{onClick:()=>U(t=>Math.min(c.total_pages,t+1)),disabled:y===c.total_pages,className:"px-3 py-1 border border-gray-300 rounded-lg disabled:opacity-50 hover:bg-gray-50",children:"Next"})]})]})]}):e.jsx("div",{className:"p-8 text-center text-gray-500",children:"No phone numbers found"})]})]})}export{G 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.