PageSourceSearch

https://petwellhk.com/assets/Review-CZFB9g2T.js

js petwellhk.com collected 2026-10-06 05:23:33 UTC 32,880 bytes, 25 lines download raw bytes

1import{r as c,j as e,L as x}from"./react-vendor-BDHNqS4B.js";import{b as He,L as $e}from"./Header-BkbupWq-.js";import{F as Fe}from"./Footer-CtylQEAH.js";import{W as Ve}from"./WishlistHeartButton-XMsXQ-jB.js";import{L as _e,C as Ge,P as Oe}from"./CompareBar-D-l8D0iQ.js";import{c as F,a_ as Ue,a$ as qe,e as Ke,h as De,b,a3 as Ze,I as ee,X as ge,U as T,B,n as ye}from"./main-m_sUF2N4.js";import{C as se}from"./checkbox-BkyFxaQM.js";import{S as K,a as D,b as Z,c as Q,d as k}from"./select-fZgDq8v8.js";import{u as Qe}from"./useSEO-CoArDrdl.js";import{u as ve,g as N,T as Xe}from"./usePriceReviewProducts-BeYKlbKA.js";import{R as L,a as Je}from"./ReviewPriceDisplay-DfIoLGNY.js";import{P as ke}from"./ProductReviewRatingBadge-CyxkMrfM.js";import{s as g,b as fe,a as H,r as te,g as $}from"./priceReviewPricing-BlvAWvXm.js";import{S as Ye}from"./search-BSw3vufk.js";import{F as es}from"./flame-HVLv3H1b.js";import{C as re,A as Ce}from"./chevron-right-CpkQxGj-.js";import{S as w}from"./store-DWI30bPC.js";import{C as ss}from"./clock-CRHi7pcr.js";import{S as ts}from"./shield-check-we62WOC3.js";import{Z as je}from"./zap-CowlN_Ex.js";import{H as rs}from"./heart-DRwCktcb.js";import{S as as}from"./scale-B2l5za8q.js";import{B as is}from"./badge-check-CHAeghjg.js";import{G as ls}from"./grid-3x3-AJB6zdOl.js";import{S as ns}from"./sparkles-BcmYxR0H.js";import{C as os}from"./chevron-left-Jw0Ezjn9.js";import{U as cs}from"./utensils-DXFnnphK.js";import"./amplify-DYDcjoow.js";import"./check-DS0-tR9o.js";import"./tag-D40gy_Nl.js";import"./query-7-WHkg5t.js";import"./textarea-D7qsgB_p.js";import"./reportService-tEzofQZ6.js";import"./phone-B2rvvDkK.js";import"./type-CVgQCqWZ.js";import"./index-CFf87M6S.js";import"./chevron-up-Cb9C18fB.js";import"./priceReviewApi-BFijUeFQ.js";import"./star-Dim9pf51.js";/**
2 * @license lucide-react v0.462.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 ds=F("Cookie",[["path",{d:"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5",key:"laymnq"}],["path",{d:"M8.5 8.5v.01",key:"ue8clq"}],["path",{d:"M16 15.5v.01",key:"14dtrp"}],["path",{d:"M12 12v.01",key:"u5ubse"}],["path",{d:"M11 17v.01",key:"1hyl5a"}],["path",{d:"M7 14v.01",key:"uct60s"}]]);/**
7 * @license lucide-react v0.462.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const ms=F("Ellipsis",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]]);/**
12 * @license lucide-react v0.462.0 - ISC
13 *
14 * This source code is licensed under the ISC license.
15 * See the LICENSE file in the root directory of this source tree.
16 */const xs=F("LayoutGrid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);/**
17 * @license lucide-react v0.462.0 - ISC
18 *
19 * This source code is licensed under the ISC license.
20 * See the LICENSE file in the root directory of this source tree.
21 */const hs=F("Pill",[["path",{d:"m10.5 20.5 10-10a4.95 4.95 0 1 0-7-7l-10 10a4.95 4.95 0 1 0 7 7Z",key:"wa1lgi"}],["path",{d:"m8.5 8.5 7 7",key:"rvfmvr"}]]),X=[{id:"all",label:"全部",icon:xs},{id:"food",label:"糧食",icon:cs},{id:"medicine",label:"藥品",icon:hs},{id:"treats",label:"零食",icon:ds},{id:"supplies",label:"日用品",icon:Oe},{id:"unknown",label:"其他",icon:ms}],ps=["Royal Canin","貓砂","Hill's i/d","Orijen","Frontline"],us=[{label:"格價首頁",href:"#review-top",hash:!0},{label:"熱門比價",href:"#review-results",hash:!0},{label:"心水清單",href:"/wishlist",hash:!1},{label:"產品比較",href:"/compare",hash:!1},{label:"店主合作",href:"/other-services",hash:!1}],we=[{id:"deals",title:"今日最抵",sub:"慳最多",filter:"deals"},{id:"stores",title:"最多店舖",sub:"選擇多",filter:"stores"},{id:"food",title:"糧食專區",sub:"主糧罐頭",filter:"food"},{id:"medicine",title:"藥品專區",sub:"驅蟲護理",filter:"medicine"},{id:"treats",title:"零食專區",sub:"獎勵小食",filter:"treats"},{id:"supplies",title:"用品專區",sub:"日常護理",filter:"supplies"}],gs=[{value:"default",label:"推薦"},{value:"price-asc",label:"價格 ↑"},{value:"price-desc",label:"價格 ↓"},{value:"savings",label:"慳最多"},{value:"stores",label:"店舖最多"}],dt=()=>{var ue;const[r,a]=c.useState(""),[l,i]=c.useState("all"),[o,d]=c.useState("all"),[n,u]=c.useState("10"),[v,V]=c.useState(0),[ae,ie]=c.useState([void 0]),[h,C]=c.useState(null),[le,ne]=c.useState("格價首頁"),[z,Pe]=c.useState("default"),[_,oe]=c.useState("grid"),{isSelected:E,toggle:A,ids:ce}=Ue(),{items:Se}=qe(),{isAuthenticated:de}=Ke(),{openPanel:Ie}=De();c.useEffect(()=>{V(0),ie([void 0])},[r,l,o,n,h]);const Re=c.useMemo(()=>({search:r.trim()||void 0,category:l==="all"?void 0:l,brand:o==="all"?void 0:o,limit:Number(n),cursor:ae[v]}
21),[r,l,o,n,ae,v]),{data:m,isLoading:Be,isError:Le,error:ze,isFetching:me}=ve(Re),Ee=(m==null?void 0:m.items)||[],P=(m==null?void 0:m.brands)||[],y=v>0,M=!!(m!=null&&m.nextCursor),{data:G}=ve({limit:48}),f=(G==null?void 0:G.items)||[],S=c.useMemo(()=>[...f].sort((s,t)=>g(t)-g(s)).slice(0,12),[f]),I=c.useMemo(()=>[...f].sort((s,t)=>t.storeCount-s.storeCount).slice(0,12),[f]),p=S[0]||I[0]||f[0],Ae=c.useMemo(()=>{switch(h){case"deals":return S;case"stores":return I;case"food":case"medicine":case"treats":case"supplies":return f.filter(s=>s.category===h);default:return f}},[h,S,I,f]),xe=h?Ae.slice(0,Number(n)):Ee,R=c.useMemo(()=>{const s=[...xe];switch(z){case"price-asc":return fe(s,"asc");case"price-desc":return fe(s,"desc");case"savings":return s.sort((t,j)=>g(j)-g(t));case"stores":return s.sort((t,j)=>j.storeCount-t.storeCount);case"default":return s;default:return z}},[xe,z]),he=c.useCallback(()=>{var s;m!=null&&m.nextCursor&&(ie(t=>{if(t[v+1]===m.nextCursor)return t;const j=t.slice(0,v+1);return j.push(m.nextCursor||void 0),j}),V(t=>t+1),(s=document.getElementById("review-results"))==null||s.scrollIntoView({behavior:"smooth",block:"start"}))},[m==null?void 0:m.nextCursor,v]),pe=c.useCallback(()=>{var s;y&&(V(t=>Math.max(0,t-1)),(s=document.getElementById("review-results"))==null||s.scrollIntoView({behavior:"smooth",block:"start"}))},[y]);Qe({title:"寵物用品格價比較 | PetWell Review",description:"比較香港寵物糧食、藥品、用品真實價格,睇清楚邊間最抵。",canonicalUrl:"https://petwellhk.com/review"});const O=l!=="all"||o!=="all"||!!r.trim()||!!h,Me=()=>{a(""),i("all"),d("all"),C(null)},U=s=>{var t;i(s),C(null),(t=document.getElementById("review-results"))==null||t.scrollIntoView({behavior:"smooth"})},q=s=>{var t;C(s),i(s==="food"||s==="medicine"||s==="treats"||s==="supplies"?s:"all"),d("all"),a(""),(t=document.getElementById("review-results"))==null||t.scrollIntoView({behavior:"smooth"})},Te=!O&&!r.trim(),We=P.length>0?`${P.length}+`:"20+";return e.jsxs("div",{className:b("review-page min-h-screen",ce.length&&"pb-20 md:pb-24"),children:[e.jsx(He,{}),e.jsx("section",{id:"review-top",className:"review-panel border-x-0 border-t-0 bg-white",children:e.jsxs("div",{className:"container mx-auto px-4 py-4 md:py-5",children:[e.jsxs("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-center",children:[e.jsxs(x,{to:"/review",className:"flex shrink-0 items-center gap-2.5",children:[e.jsx("img",{src:Ze,alt:"PetWell",className:"h-9 w-9 object-contain md:h-10 md:w-10"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[15px] font-semibold leading-tight text-foreground md:text-base",children:"PetWell 格價"}),e.jsx("p",{className:"text-[12px] text-muted-foreground",children:"香港寵物用品比價"})]})]}),e.jsxs("div",{className:"min-w-0 flex-1 lg:max-w-2xl lg:mx-auto",children:[e.jsxs("div",{className:"review-search flex h-11 border-2 border-primary transition-shadow md:h-12",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2 bg-white px-3",children:[e.jsx(Ye,{className:"h-4 w-4 shrink-0 text-primary/70"}),e.jsx(ee,{value:r,onChange:s=>{a(s.target.value),C(null)},onKeyDown:s=>{var t;s.key==="Enter"&&((t=document.getElementById("review-results"))==null||t.scrollIntoView({behavior:"smooth"}))},placeholder:"搜尋品牌、產品名稱…",className:"h-full border-0 px-0 text-[14px] shadow-none focus-visible:ring-0 md:text-[15px]"}),r&&e.jsx("button",{type:"button",onClick:()=>a(""),"aria-label":"清除搜尋",className:"rounded-sm p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground",children:e.jsx(ge,{className:"h-4 w-4"})})]}),e.jsx("button",{type:"button",onClick:()=>{var s;return(s=document.getElementById("review-results"))==null?void 0:s.scrollIntoView({behavior:"smooth"})},className:"shrink-0 bg-primary px-5 text-[14px] font-semibold text-primary-foreground transition-colors hover:bg-primary-hover md:px-8",children:"搜尋"})]}),e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-x-2 gap-y-1 text-[12px]",children:[e.jsxs("span",{className:"inline-flex items-center gap-1 text-muted-foreground",children:[e.jsx(es,{className:"h-3 w-3 text-primary"})," 熱搜"]}
21),ps.map(s=>e.jsx("button",{type:"button",onClick:()=>{var t;a(s),C(null),(t=document.getElementById("review-results"))==null||t.scrollIntoView({behavior:"smooth"})},className:"review-chip border border-[hsl(var(--review-line))] bg-white px-2 py-0.5 text-foreground/80 transition-colors hover:border-primary/40 hover:text-primary",children:s},s))]})]})]}),e.jsx("nav",{className:"mt-3 flex flex-wrap gap-1 border-t border-[hsl(var(--review-line))] pt-1",children:us.map(s=>s.hash?e.jsx("a",{href:s.href,"data-active":le===s.label,className:"review-nav-tab",onClick:()=>ne(s.label),children:s.label},s.label):e.jsx(x,{to:s.href,"data-active":le===s.label,className:"review-nav-tab",onClick:()=>ne(s.label),children:s.label},s.label))})]})}),Te&&e.jsx("section",{className:"container mx-auto px-4 py-3 md:py-4",children:e.jsxs("div",{className:"flex gap-3",children:[e.jsxs("aside",{className:"hidden w-[188px] shrink-0 lg:block",children:[e.jsxs("div",{className:"review-category-rail bg-primary text-primary-foreground",children:[e.jsx("div",{className:"border-b border-white/15 px-3 py-2 text-[12px] font-semibold",children:"商品分類"}),e.jsx("ul",{children:X.map(s=>e.jsx("li",{children:e.jsxs("button",{type:"button",onClick:()=>U(s.id),className:"flex w-full items-center gap-2 border-b border-white/10 px-3 py-2.5 text-left text-[13px] last:border-b-0 hover:bg-white/10",children:[e.jsx(s.icon,{className:"h-3.5 w-3.5 shrink-0 opacity-90",strokeWidth:2}),e.jsx("span",{className:"flex-1",children:s.label}),e.jsx(re,{className:"h-3.5 w-3.5 opacity-50"})]})},s.id))})]}),e.jsxs("div",{className:"review-panel mt-2 space-y-2 p-3 text-[12px] text-muted-foreground",children:[e.jsx(J,{icon:w,label:`${We} 間香港寵物店`}),e.jsx(J,{icon:ss,label:"每日更新報價"}),e.jsx(J,{icon:ts,label:"中立格價平台"})]})]}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row",children:[p&&e.jsxs(x,{to:N(p),className:"review-panel review-hero-deal review-card-product group relative flex min-h-[210px] min-w-0 flex-1 flex-col overflow-hidden sm:max-w-[42%]",children:[p.image&&e.jsx("img",{src:p.image,alt:"",className:"absolute -right-2 top-1/2 h-[120px] w-[120px] -translate-y-1/2 object-contain transition-transform duration-300 group-hover:scale-105 sm:h-[140px] sm:w-[140px]"}),e.jsxs("div",{className:"relative flex h-full flex-col p-4 md:p-5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"review-savings-pill inline-flex items-center gap-1 rounded-sm px-2 py-0.5 text-[11px]",children:[e.jsx(je,{className:"h-3 w-3"})," 今日最抵"]}),g(p)>0&&e.jsxs("span",{className:"text-[11px] font-semibold text-primary",children:["慳 ",g(p),"%"]})]}),e.jsx("p",{className:"mt-3 line-clamp-2 max-w-[58%] text-[14px] font-semibold leading-snug text-foreground md:text-[15px]",children:p.name}),e.jsx("p",{className:"mt-0.5 max-w-[58%] truncate text-[12px] text-primary",children:p.brand}),e.jsxs("div",{className:"mt-auto pt-3",children:[e.jsx(L,{product:p,size:"lg"}),H(p)>0&&e.jsxs("div",{className:"mt-1.5 flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:"review-price-struck",children:["HK$",te($(p).highestPrice)]}),e.jsxs("span",{className:"text-[11px] font-medium text-primary",children:["慳 HK$",H(p)]})]}),e.jsxs("div",{className:"mt-2 max-w-[70%]",children:[e.jsx("div",{className:"review-spread-bar","aria-hidden":!0}),e.jsxs("p",{className:"mt-1.5 flex items-center gap-1 text-[11px] text-muted-foreground",children:[e.jsx(w,{className:"h-3 w-3"}),p.storeCount," 間店舖報價 · 睇全部",e.jsx(Ce,{className:"h-3 w-3 opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})]})]}),e.jsx("div",{className:"review-panel grid min-h-[210px] flex-1 grid-cols-3 grid-rows-2 divide-x divide-y divide-[hsl(var(--review-line))] overflow-hidden",children:we.map(s=>{const t=vs(f,s.filter),j=h===s.filter;return e.jsxs("button",{type:"button","data-active":j,onClick:()=>q(s.filter),className:"review-promo-tile flex flex-col border border-transparent bg-white p-2.5 text-left",children:[e.jsx("p",{className:"text-[13px] font-semibold text-foreground",children:s.title}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:s.sub}),t&&e.jsxs("div",{className:"mt-auto flex items-end justify-between gap-1 pt-2",children:[t.image?e.jsx("img",{src:t.image,alt:"",className:"h-9 w-9 object-contain",loading:"lazy"}):e.jsx("span",{className:"h-9 w-9"}),e.jsx(Je,{amount:$(t).lowestPrice,size:"sm"})]})]},s.id)})})]}),S.length>1&&e.jsx(be,{title:"今日最抵",icon:je,products:S.slice(1,9),onSeeAll:()=>q("deals"),isSelected:E,onToggleCompare:s=>{const t=A(s);!t.ok&&t.reason&&T.error(t.reason,{duration:3e3})}}),I.length>0&&e.jsx(be,{title:"最多店舖比價",icon:w,products:I.slice(0,8),onSeeAll:()=>q("stores"),isSelected:E,onToggleCompare:s=>{const t=A(s);!t.ok&&t.reason&&T.error(t.reason,{duration:3e3})}}),e.jsx("div",{className:"mt-2 grid grid-cols-6 gap-1.5 lg:hidden",children:X.map(s=>e.jsxs("button",{type:"button",onClick:()=>U(s.id),className:"review-panel flex flex-col items-center gap-1 py-2.5",children:[e.jsx(s.icon,{className:"h-4 w-4 text-primary",strokeWidth:2}),e.jsx("span",{className:"text-[11px] font-medium text-foreground
21/80",children:s.label})]},s.id))}),P.length>0&&e.jsxs("div",{className:"review-panel mt-2 px-3 py-2.5",children:[e.jsx("p",{className:"mb-2 text-[12px] font-medium text-muted-foreground",children:"熱門品牌"}),e.jsx("div",{className:"-mx-1 flex gap-2 overflow-x-auto pb-0.5 scrollbar-none",children:P.slice(0,24).map(s=>e.jsx(x,{to:`/review/brand/${encodeURIComponent(s)}`,className:"shrink-0 review-chip border border-[hsl(var(--review-line))] bg-white px-2.5 py-0.5 text-[12px] text-foreground/85 hover:border-primary hover:text-primary",children:s},s))})]})]}),e.jsxs("aside",{className:"hidden w-[212px] shrink-0 xl:block",children:[e.jsxs("div",{className:"review-panel p-4",children:[e.jsxs("p",{className:"text-[13px] text-muted-foreground",children:[fs(),",",de?"歡迎返嚟":"歡迎"]}),de?e.jsx(x,{to:"/owner-zone",className:"mt-3 block",children:e.jsx(B,{variant:"outline",className:"h-9 w-full rounded-md text-[13px]",size:"sm",children:"我的帳戶"})}):e.jsxs(B,{onClick:()=>Ie("LANDING"),className:"mt-3 h-9 w-full rounded-md text-[13px]",size:"sm",children:[e.jsx($e,{className:"mr-1.5 h-3.5 w-3.5"}),"登入 / 註冊"]}),e.jsxs("div",{className:"review-panel-inset mt-4 grid grid-cols-2 gap-px overflow-hidden border border-[hsl(var(--review-line))] bg-[hsl(var(--review-line))]",children:[e.jsx(W,{to:"/wishlist",icon:rs,label:"心水",count:Se.length}),e.jsx(W,{to:"/compare",icon:as,label:"比較",count:ce.length}),e.jsx(W,{to:"/review",icon:w,label:"格價"}),e.jsx(W,{to:"/other-services",icon:is,label:"合作"})]})]}),e.jsxs("div",{className:"review-panel mt-2 border-primary/20 bg-secondary/50 p-3 text-center",children:[e.jsx("p",{className:"text-[13px] font-semibold text-primary",children:"價格永久免費"}),e.jsx("p",{className:"mt-1 text-[12px] leading-relaxed text-muted-foreground",children:"我哋唔賣嘢,只幫你睇清楚邊間最抵"})]})]})]})}),e.jsxs("section",{id:"review-results",className:"scroll-mt-[calc(var(--header-height)+0.25rem)]",children:[e.jsx("div",{className:"sticky top-[var(--header-height)] z-20 border-y border-[hsl(var(--review-line))] bg-white/95 backdrop-blur-sm",children:e.jsx("div",{className:"container mx-auto px-4 py-2.5",children:e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:"mr-auto flex min-w-0 items-center gap-2",children:[e.jsx("h2",{className:"shrink-0 text-[14px] font-semibold text-foreground",children:h?((ue=we.find(s=>s.filter===h))==null?void 0:ue.title)??"精選":O?"搜尋結果":"猜你鍾意"}),R.length>0&&e.jsxs("span",{className:"review-stat-pill hidden px-2 py-0.5 text-[11px] text-muted-foreground sm:inline",children:[R.length," 件"]})]}),e.jsx("div",{className:"flex min-w-0 flex-1 gap-1 overflow-x-auto scrollbar-none lg:flex-none lg:overflow-visible",children:X.map(s=>e.jsx(js,{active:l===s.id,onClick:()=>U(s.id),children:s.label},s.id))}),e.jsxs(K,{value:o,onValueChange:d,children:[e.jsx(D,{className:"review-chip h-7 w-[118px] shrink-0 border-[hsl(var(--review-line))] bg-white text-[12px]",children:e.jsx(Z,{placeholder:"品牌"})}),e.jsxs(Q,{children:[e.jsx(k,{value:"all",children:"全部品牌"}),P.map(s=>e.jsx(k,{value:s,children:s},s))]})]}),e.jsxs(K,{value:z,onValueChange:s=>Pe(s),children:[e.jsx(D,{className:"review-chip h-7 w-[96px] shrink-0 border-[hsl(var(--review-line))] bg-white text-[12px]",children:e.jsx(Z,{})}),e.jsx(Q,{children:gs.map(s=>e.jsx(k,{value:s.value,children:s.label},s.value))})]}),!h&&e.jsxs(K,{value:n,onValueChange:u,children:[e.jsx(D,{className:"review-chip hidden h-7 w-[84px] shrink-0 border-[hsl(var(--review-line))] bg-white text-[12px] sm:flex",children:e.jsx(Z,{})}),e.jsxs(Q,{children:[e.jsx(k,{value:"10",children:"10 件"}),e.jsx(k,{value:"20",children:"20 件"}),e.jsx(k,{value:"40",children:"40 件"})]})]}),e.jsxs("div",{className:"hidden items-center rounded-md border border-[hsl(var(--review-line))] sm:flex",children:[e.jsx("button",{type:"button",onClick:()=>oe("grid"),"aria-label":"格狀檢視",className:b("flex h-7 w-8 items-center justify-center transition-colors",_==="grid"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:e.jsx(ls,{className:"h-3.5 w-3.5"})}),e.jsx("button",{type:"button",onClick:()=>oe("list"),"aria-label":"列表檢視",className:b("flex h-7 w-8 items-center justify-center border-l border-[hsl(var(--review-line))] transition-colors",_==="list"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:e.jsx(_e,{className:"h-3.5 w-3.5"})})]}),O&&e.jsxs("button",{type:"button",onClick:Me,className:"inline-flex shrink-0 items-center gap-0.5 text-[12px] text-primary hover:underline",children:[e.jsx(ge,{className:"h-3 w-3"})," 清除"]})]})})}),e.jsx("div",{className:"container mx-auto px-4 py-3 md:py-4",children:Be&&!h?e.jsx(Ns,{}):Le&&!h?e.jsx(ys,{message:ze.message}):R.length===0?e.jsx(ks,{initialQuery:r}):_==="list"?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"review-stagger space-y-1.5",children:R.map(s=>e.jsx(bs,{product:s,isSelected:E(s.id),onToggleCompare:()=>{const t=A(s.id);!t.ok&&t.reason&&T.error(t.reason,{duration:3e3})}},s.id))}),!h&&(y||M)&&e.jsx(Ne,{pageIndex:v,hasPreviousPage:y,hasNextPage:M,isFetching:me,onPrevious:pe,onNext:he})]}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"review-product-grid review-stagger grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6",children:R.map(s=>e.jsx(ws,{product:s,isSelected:E(s.id),onToggleCompare:()=>{const t=A(s.id);!t.ok&&t.reason&&T.error(t.reason,{duration:3e3})}},s.id))}),!h&&(y||M)&&e.jsx(Ne,{pageIndex:v,hasPreviousPage:y,hasNextPage:M,isFetching:me,onPrevious:pe,onNext:he})]})})]}),e.jsx("section",{className:"mt-2 border-t border-[hsl(var(--review-line))] bg-white",children:e.jsxs("div",{className:"container mx-auto grid gap-6 px-4 py-8 md:grid-cols-[1.4fr_1fr] md:py-10",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[12px] text-muted-foreground",children:"關於 PetWell 格價"}),e.jsxs("h2",{className:"review-display mt-2 text-xl leading-snug md:text-2xl",children:["我哋唔賣嘢,只係幫你",e.jsx("span",{className:"text-primary",children:"睇清楚"}),"價錢"]}),e.jsx("p",{className:"mt-2 max-w-lg text-[14px] leading-relaxed text-muted-foreground",children:"所有價格由 PetWell 編
21輯部整理自香港寵物店公開報價。價格與庫存可能隨時變動,落單前請以店舖頁面為準。"})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(Y,{icon:ns,label:"想我哋加邊款?",sub:"WhatsApp 編輯部",href:"https://wa.me/85255954078"}),e.jsx(Y,{icon:w,label:"店主合作",sub:"加入比價聯盟",href:"/other-services",internal:!0}),e.jsx(Y,{icon:Xe,label:"格價公平守則",sub:"點解信得過",href:"/about",internal:!0})]})]})}),e.jsx(Fe,{}),e.jsx(Ge,{})]})};function vs(r,a){return a==="deals"?[...r].sort((l,i)=>g(i)-g(l))[0]:a==="stores"?[...r].sort((l,i)=>i.storeCount-l.storeCount)[0]:r.find(l=>l.category===a)}function fs(){const r=new Date().getHours();return r<12?"早晨":r<18?"午安":"晚安"}function J({icon:r,label:a}){return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(r,{className:"h-3.5 w-3.5 shrink-0 text-primary",strokeWidth:2}),e.jsx("span",{children:a})]})}function W({to:r,icon:a,label:l,count:i}){return e.jsxs(x,{to:r,className:"flex flex-col items-center bg-white py-3 text-center hover:bg-[hsl(var(--review-canvas))]",children:[e.jsx(a,{className:"h-4 w-4 text-foreground/70",strokeWidth:1.75}),e.jsx("span",{className:"mt-1 text-[11px] font-medium text-foreground/80",children:l}),i!==void 0&&i>0&&e.jsx("span",{className:"text-[11px] tabular-nums text-primary",children:i})]})}function js({active:r,onClick:a,children:l}){return e.jsx("button",{type:"button",onClick:a,className:b("review-chip shrink-0 border px-2.5 py-0.5 text-[12px] font-medium transition-colors",r?"border-primary bg-primary text-primary-foreground":"border-[hsl(var(--review-line))] bg-white text-muted-foreground hover:border-primary/40 hover:text-foreground"),children:l})}function Y({icon:r,label:a,sub:l,href:i,internal:o}){const d="group flex items-center gap-3 rounded-lg border border-[hsl(var(--review-line))] bg-white px-3 py-2.5 hover:border-primary/30",n=e.jsxs(e.Fragment,{children:[e.jsx(r,{className:"h-4 w-4 text-primary",strokeWidth:2}),e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("p",{className:"text-[14px] font-medium",children:a}),e.jsx("p",{className:"text-[12px] text-muted-foreground",children:l})]}),e.jsx(Ce,{className:"h-3.5 w-3.5 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100"})]});return o?e.jsx(x,{to:i,className:d,children:n}):e.jsx("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:d,children:n})}const ws=c.memo(function({product:a,isSelected:l,onToggleCompare:i}){const o=g(a),d=H(a),n=$(a);return e.jsxs("article",{className:"review-panel review-card-product group flex h-full flex-col overflow-hidden bg-white",children:[e.jsxs(x,{to:N(a),className:"relative block aspect-square bg-[hsl(var(--review-canvas))]/40 p-2.5",children:[a.image?e.jsx("img",{src:a.image,alt:a.name,loading:"lazy",className:"h-full w-full object-contain transition-transform duration-300 group-hover:scale-[1.03]"}):e.jsx("div",{className:"flex h-full items-center justify-center text-[12px] text-muted-foreground",children:"—"}),o>0&&e.jsxs("span",{className:"review-savings-pill absolute left-2 top-2 rounded-sm px-1.5 py-0.5 text-[10px] leading-none",children:["慳",o,"%"]}),e.jsx("div",{className:"absolute bottom-2 right-2 opacity-0 transition-opacity group-hover:opacity-100",children:e.jsx(Ve,{productId:a.id,currentLowest:n.lowestPrice,size:"sm"})})]}),e.jsxs("div",{className:"flex flex-1 flex-col gap-1 p-2.5 pt-2",children:[e.jsx(x,{to:`/review/brand/${encodeURIComponent(a.brand)}`,className:"truncate text-[11px] font-medium text-primary hover:underline",children:a.brand}),e.jsx(x,{to:N(a),children:e.jsx("h3",{className:"line-clamp-2 min-h-[2.25rem] text-[12px] leading-snug text-foreground group-hover:text-primary",children:a.name})}),e.jsxs("div",{className:"mt-auto space-y-1 pt-1",children:[e.jsx(L,{product:a,size:"sm"}),d>0&&e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsxs("span",{className:"review-price-struck",children:["HK$",te(n.highestPrice)]}),e.jsxs("span",{className:"text-[10px] font-medium text-primary",children:["慳 HK$",d]})]}),e.jsxs("div",{className:"flex items-end justify-between gap-1",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsxs("p",{className:"flex items-center gap-0.5 text-[11px] text-muted-foreground",children:[e.jsx(w,{className:"h-3 w-3 shrink-0"}),a.storeCount," 間"]}),e.jsx(ke,{avgRating:a.avgRating,numReviews:a.numReviews})]}),e.jsxs("label",{className:b("inline-flex shrink-0 cursor-pointer items-center gap-1 rounded-sm px-1 py-0.5 text-[10px] font-medium transition-colors",l?"bg-primary/10 text-primary":"text-muted-foreground hover:bg-muted hover:text-foreground"),onClick:u=>u.stopPropagation(),children:[e.jsx(se,{checked:l,onCheckedChange:i,className:"h-3 w-3"}),"比較"]})]})]})]})]})});function bs({product:r,isSelected:a,onToggleCompare:l}){const i=g(r),o=H(r),d=$(r);return e.jsxs("article",{className:"review-panel review-card-product review-list-row bg-white px-3 py-2.5 md:px-4 md:py-3",children:[e.jsx(x,{to:N(r),className:"relative block h-14 w-14 shrink-0 overflow-hidden rounded-md bg-[hsl(var(--review-canvas))]/50 p-1 md:h-16 md:w-16",children:r.image?e.jsx("img",{src:r.image,alt:"",loading:"lazy",className:"h-full w-full object-contain"}):e.jsx("div",{className:"flex h-full items-center justify-center text-[10px] text-muted-foreground",children:"—"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx(x,{to:`/review/brand/${encodeURIComponent(r.brand)}`,className:"text-[11px] font-medium text-primary hover:underline",children:r.brand}),e.jsx(x,{to:N(r),children:e.jsx("h3",{className:"line-clamp-2 text-[13px] font-medium leading-snug text-foreground hover:text-primary md:line-clamp-1",children:r.name})}),e.jsxs("p",{className:"mt-0.5 hidden items-center gap-2 text-[11px] text-muted-foreground md:flex",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(w,{className:"h-3 w-3"})," ",r.storeCount," 間店舖"]}),e.jsx(ke,{avgRating:r.avgRating,numReviews:r.numReviews})]})]}),e.jsxs("div",{className:"hidden text-right md:block",children:[e.jsx(L,{product:r,size:"sm"}),e.jsx("p",{className:"mt-0.5 text-[10px] text-muted-foreground",children:"最低"})]}),e.jsx("div",{className:"hidden text-right md:block",children:d.highestPrice>d.lowestPrice?e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"review-price-struck text-[13px]",children:["HK$",te(d.highe
21stPrice)]}),e.jsx("p",{className:"mt-0.5 text-[10px] text-muted-foreground",children:"最高"})]}):e.jsx("span",{className:"text-[12px] text-muted-foreground",children:"—"})}),e.jsxs("div",{className:"hidden text-center md:block",children:[i>0?e.jsxs("span",{className:"review-savings-pill inline-block rounded-sm px-1.5 py-0.5 text-[11px]",children:["慳 ",i,"%"]}):e.jsx("span",{className:"text-[12px] text-muted-foreground",children:"—"}),o>0&&e.jsxs("p",{className:"mt-0.5 text-[10px] text-primary",children:["HK$",o]})]}),e.jsxs("div",{className:"text-right md:hidden",children:[e.jsx(L,{product:r,size:"sm"}),i>0&&e.jsxs("span",{className:"mt-0.5 inline-block text-[10px] font-medium text-primary",children:["慳",i,"%"]})]}),e.jsx("label",{className:b("flex cursor-pointer items-center justify-end",a?"text-primary":"text-muted-foreground"),onClick:n=>n.stopPropagation(),children:e.jsx(se,{checked:a,onCheckedChange:l,className:"h-4 w-4"})})]})}function be({title:r,icon:a,products:l,onSeeAll:i,isSelected:o,onToggleCompare:d}){return l.length===0?null:e.jsxs("div",{className:"review-panel mt-2 overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-[hsl(var(--review-line))] px-3 py-2",children:[e.jsxs("h3",{className:"flex items-center gap-1.5 text-[13px] font-semibold text-foreground",children:[e.jsx(a,{className:"h-3.5 w-3.5 text-primary",strokeWidth:2.5}),r]}),e.jsxs("button",{type:"button",onClick:i,className:"flex items-center gap-0.5 text-[12px] font-medium text-primary hover:underline",children:["睇全部 ",e.jsx(re,{className:"h-3.5 w-3.5"})]})]}),e.jsx("div",{className:"review-deal-rail flex gap-2 overflow-x-auto p-2.5",children:l.map(n=>{const u=g(n);return e.jsxs("div",{className:"review-deal-rail-item review-card-product review-panel w-[132px] shrink-0 overflow-hidden bg-white sm:w-[148px]",children:[e.jsxs(x,{to:N(n),className:"relative block aspect-square bg-[hsl(var(--review-canvas))]/30 p-2",children:[n.image?e.jsx("img",{src:n.image,alt:"",loading:"lazy",className:"h-full w-full object-contain"}):e.jsx("div",{className:"flex h-full items-center justify-center text-[10px] text-muted-foreground",children:"—"}),u>0&&e.jsxs("span",{className:"review-savings-pill absolute left-1 top-1 rounded-sm px-1 py-px text-[9px] leading-none",children:["-",u,"%"]})]}),e.jsxs("div",{className:"space-y-1 p-2 pt-1.5",children:[e.jsx(x,{to:N(n),children:e.jsx("p",{className:"line-clamp-2 min-h-[2rem] text-[11px] leading-snug text-foreground",children:n.name})}),e.jsx(L,{product:n,size:"sm",showPurchaseNote:!1}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:[n.storeCount," 店"]}),e.jsx("label",{className:b("cursor-pointer",o(n.id)?"text-primary":"text-muted-foreground"),onClick:v=>v.stopPropagation(),children:e.jsx(se,{checked:o(n.id),onCheckedChange:()=>d(n.id),className:"h-3 w-3"})})]})]})]},n.id)})})]})}function Ne({pageIndex:r,hasPreviousPage:a,hasNextPage:l,isFetching:i,onPrevious:o,onNext:d}){return e.jsxs("div",{className:"mt-6 flex items-center justify-center gap-3",children:[e.jsxs(B,{variant:"outline",size:"sm",onClick:o,disabled:!a||i,className:"h-8 rounded-md border-[hsl(var(--review-line))] text-[13px]",children:[e.jsx(os,{className:"mr-1 h-4 w-4"})," 上一頁"]}),e.jsxs("span",{className:"min-w-[4rem] text-center text-[13px] text-muted-foreground",children:["第 ",r+1," 頁"]}),e.jsxs(B,{variant:"outline",size:"sm",onClick:d,disabled:!l||i,className:"h-8 rounded-md border-[hsl(var(--review-line))] text-[13px]",children:[i?e.jsx(ye,{className:"mr-1 h-4 w-4 animate-spin"}):null,"下一頁 ",e.jsx(re,{className:"ml-1 h-4 w-4"})]})]})}function Ns(){return e.jsxs("div",{className:"review-panel flex items-center justify-center p-12 text-[14px] text-muted-foreground",children:[e.jsx(ye,{className:"mr-2 h-5 w-5 animate-spin text-primary"}),"正在整理報價…"]})}function ys({message:r}){return e.jsxs("div",{className:"review-panel border-destructive/30 p-6 text-center",children:[e.jsx("h3",{className:"review-display text-xl",children:"暫時未能載入"}),e.jsx("p",{className:"mx-auto mt-2 max-w-xl text-[14px] text-muted-foreground",children:r})]})}function ks({initialQuery:r}){const[a,l]=c.useState(""),[i,o]=c.useState(r),d=a.trim().length>0&&i.trim().length>0,n=()=>
21{if(!d)return;const u=`[產品建議]
22想睇嘅產品:${i.trim()}
23聯絡方式(電話 / IG):${a.trim()}
24
25麻煩 PetWell 更新後 DM 我,多謝!`;window.open(`https://wa.me/85255954078?text=${encodeURIComponent(u)}`,"_blank","noopener,noreferrer")};return e.jsx("div",{className:"review-panel p-8 md:p-10",children:e.jsxs("div",{className:"mx-auto max-w-md text-center",children:[e.jsx("h3",{className:"review-display text-2xl",children:"未搵到?話我哋知"}),e.jsx("p",{className:"mt-2 text-[14px] text-muted-foreground",children:"留低聯絡方法同產品名,更新後即刻通知你"}),e.jsxs("div",{className:"mt-5 space-y-2 text-left",children:[e.jsx(ee,{placeholder:"例如:Royal Canin 成貓糧",value:i,onChange:u=>o(u.target.value),maxLength:200}),e.jsx(ee,{placeholder:"電話 或 IG",value:a,onChange:u=>l(u.target.value),maxLength:100}),e.jsx(B,{onClick:n,disabled:!d,className:"w-full rounded-md",size:"lg",children:"提交建議"})]})]})})}export{dt 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.