PageSourceSearch

https://splashiq.ai/assets/compare-contractors-BWLOD-oF.js

js splashiq.ai collected 2026-10-05 12:43:04 UTC 3,488 bytes, 1 lines download raw bytes

1import{r as i,e as c,j as e,B as a,L as x,f as h,P as u,E as f,S as p,w as j}from"./index-CzAkNt2W.js";import{T as g}from"./trash-2-Bb14b2qT.js";function N(t){return new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",timeZone:"UTC"}).format(new Date(t))}function w(){const[t,l]=i.useState([]),[n,d]=i.useState(!1);i.useEffect(()=>{l(c(window.localStorage)),d(!0)},[]);function o(s){const r=t.filter(m=>m.id!==s);j(window.localStorage,r),l(r)}return e.jsxs("div",{className:"min-h-screen bg-background flex flex-col",children:[e.jsx("main",{className:"flex-1",children:e.jsxs("section",{className:"mx-auto max-w-6xl px-6 py-14",children:[e.jsx("p",{className:"text-sm font-semibold uppercase tracking-widest text-primary",children:"Your shortlist"}),e.jsx("h1",{className:"mt-3 font-display text-4xl font-bold tracking-tight",children:"Compare pool contractors"}),e.jsx("p",{className:"mt-3 max-w-2xl text-muted-foreground",children:"Review the contractors you saved, compare verified services, then contact the best fit directly. Your shortlist stays in this browser."}),n&&t.length===0?e.jsxs("div",{className:"mt-10 rounded-2xl border bg-card p-8 text-center",children:[e.jsx("h2",{className:"text-xl font-semibold",children:"No contractors saved yet"}),e.jsx("p",{className:"mt-2 text-sm text-muted-foreground",children:"Save contractors from their profile pages to compare them here."}),e.jsx(a,{asChild:!0,className:"mt-5",children:e.jsx(x,{to:"/pool-service-near-me",children:"Find pool contractors near me"})})]}):e.jsx("div",{className:"mt-10 grid gap-5 md:grid-cols-2 xl:grid-cols-3",children:t.map(s=>e.jsxs("article",{className:"flex flex-col rounded-2xl border bg-card p-5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:s.name}),e.jsxs("p",{className:"mt-1 text-sm text-muted-foreground",children:[s.city,", ",s.state]})]}),e.jsx("button",{type:"button",onClick:()=>
1o(s.id),"aria-label":`Remove ${s.name} from comparison`,className:"rounded-md p-2 text-muted-foreground hover:bg-muted hover:text-foreground",children:e.jsx(g,{className:"h-4 w-4","aria-hidden":"true"})})]}),e.jsxs("div",{className:"mt-5 flex-1",children:[e.jsx("h3",{className:"text-sm font-semibold",children:"Verified services"}),s.services.length>0?e.jsx("ul",{className:"mt-2 space-y-1.5 text-sm text-foreground/85",children:s.services.slice(0,8).map(r=>e.jsxs("li",{className:"flex gap-2",children:[e.jsx(h,{className:"mt-0.5 h-4 w-4 shrink-0 text-primary","aria-hidden":"true"}),e.jsx("span",{children:r})]},r))}):e.jsx("p",{className:"mt-2 text-sm text-muted-foreground",children:"No service list supplied."})]}),e.jsx("p",{className:"mt-5 text-xs text-muted-foreground",children:s.verifiedAt?`Last verified ${N(s.verifiedAt)}`:"Pending public release"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-2",children:[e.jsx(a,{asChild:!0,size:"sm",children:e.jsx("a",{href:s.url,children:"View profile"})}),s.phone&&e.jsx(a,{asChild:!0,size:"sm",variant:"outline",children:e.jsxs("a",{href:`tel:${s.phone}`,children:[e.jsx(u,{className:"h-4 w-4","aria-hidden":"true"})," Call"]})}),s.website&&e.jsx(a,{asChild:!0,size:"sm",variant:"outline",children:e.jsxs("a",{href:s.website,target:"_blank",rel:"noopener noreferrer nofollow",children:[e.jsx(f,{className:"h-4 w-4","aria-hidden":"true"})," Website"]})})]})]},s.id))})]})}),e.jsx(p,{})]})}export{w as component};

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.