1import{r as o,j as i}from"./jsx-runtime-D2HyDbKh.js";import{u as R}from"./CartProvider-DRDkNzgb.js";import{P as V,a as z}from"./KioskProductDetail-CI5tcYte.js";import{m as p}from"./motion-FGmiHZpJ.js";import{A as E}from"./index-C9Ymd-py.js";import{P as F}from"./index-CSgRVgty.js";function G(a){const{carts:b,addToCart:x,adjustQuantity:d,ready:f}=R(),l=o.useRef(new Set),c=o.useCallback(e=>{var t,r;return(r=(t=b.find(u=>u.merchant.storeID===a))==null?void 0:t.cartLines)==null?void 0:r.find(u=>u.merchandise.id===e)},[b,a]),s=o.useCallback(e=>{var t;return((t=c(e))==null?void 0:t.quantity)??0},[c]),n=o.useCallback(async e=>{if(l.current.has(e))return{success:!1};l.current.add(e);try{const t=`kiosk-add-${e}-${Date.now()}`;return await x(e,1,a,t,[])??{success:!1}}finally{l.current.delete(e)}},[x,a]),g=o.useCallback(async e=>{if(l.current.has(e))return;const t=c(e);if(t!=null&&t.id){l.current.add(e);try{const r=`kiosk-inc-${e}-${Date.now()}`;(await d(e,t.id,t.quantity+1,a,r)).success||console.warn("[kiosk-quick-add] increment failed for",e)}finally{l.current.delete(e)}}},[c,d,a]),y=o.useCallback(async e=>{if(l.current.has(e))return;const t=c(e);if(!(!(t!=null&&t.id)||t.quantity<=0)){l.current.add(e);try{const r=`kiosk-dec-${e}-${Date.now()}`;(await d(e,t.id,Math.max(0,t.quantity-1),a,r)).success||console.warn("[kiosk-quick-add] decrement failed for",e)}finally{l.current.delete(e)}}},[c,d,a]);return{quickAdd:n,incrementQuantity:g,decrementQuantity:y,getCartLine:c,getQuantity:s,ready:f}}function W({product:a,storeId:b,merchantId:x,index:d=0,onProductTap:f,badge:l,hero:c}){var C,N,q,Q,A;const s=a.defaultAvailableVariant,n=s==null?void 0:s.id,g=(((N=(C=a.variants)==null?void 0:C.edges)==null?void 0:N.length)??0)>1,y=(q=a.modifierGroup)==null?void 0:q.some(m=>m.min>0),e=((Q=s==null?void 0:s.price)==null?void 0:Q.presentation)??"",t=g?`From ${e}`:e,r=(A=s==null?void 0:s.image)==null?void 0:A.scale1x,u=s!=null&&s.image?`${s.image.scale1x} 1x, ${s.image.scale2x} 2x, ${s.image.scale3x} 3x`:void 0,{quickAdd:k,incrementQuantity:h,decrementQuantity:j,getQuantity:D,ready:w}=G(x),$=n?D(n):0,K=o.useCallback(async m=>{m.preventDefault(),m.stopPropagation(),n&&await k(n)},[n,k]),P=o.useCallback(()=>{n&&h(n)},[n,h]),S=o.useCallback(()=>{n&&j(n)},[n,j]),M=!y&&!!n;return i.jsx(p.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{duration:.2,delay:d*.03},className:"h-full",children:i.jsxs("div",{role:"button",onClick:()=>{var m;return f==null?void 0:f(a.slug,(m=s==null?void 0:s.image)==null?void 0:m.scale2x)},className:"flex h-full cursor-pointer flex-col rounded-lg bg-white shadow-sm border border-gray-100 overflow-hidden touch-manipulation",children:[i.jsxs(p.div,{className:`${c?"aspect-[16/9]":"aspect-square"} relative`,children:[r?i.jsx("img",{src:r,srcSet:u,alt:a.name,className:"h-full w-full object-cover",loading:"lazy"}):i.jsx("div",{className:"flex h-full w-full items-center justify-center bg-gray-100",children:i.jsx(V,{className:"h-12 w-12 text-gray-300"})}),l&&i.jsx("span",{className:`absolute top-2 left-2 rounded-full px-2.5 py-0.5 text-xs font-semibold ${l==="Popular"?"bg-orange-100 text-orange-800":"bg-green-100 text-green-800"}`,children:l}),y&&i.jsx("span",{className:"absolute bottom-2 left-2 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-800",children:"Customizable"})]}),i.jsxs("div",{className:"flex flex-1 flex-col p-3 space-y-1",children:[i.jsx("h3",{className:`${c?"text-base font-semibold":"text-sm font-medium"} text-gray-900 line-clamp-2 leading-tight`,children:a.name}),a.description&&i.jsx("p",{className:`${c?"text-sm line-clamp-3":"text-xs line-clamp-2"} text-gray-500 leading-snug`,children:a.description}),i.jsxs("div",{className:"flex items-center justify-between mt-auto pt-1",children:[i.jsx("p",{className:`min-w-0 truncate ${c?"text-base":"text-sm"} font-semibold text-gray-900`,children:t}),M&&i.jsx(E,{mode:"wait",initial:!1,children:$===0?i.jsx(p.button,{type:"button",disabled:!w,onClick:K,initial:{scale:.8,opacity:0}
1,animate:{scale:1,opacity:1},exit:{scale:.8,opacity:0},transition:{duration:.15},className:"flex min-h-10 min-w-10 items-center justify-center rounded-full bg-cta-primary-500 text-white transition-opacity disabled:opacity-50","aria-label":`Add ${a.name} to cart`,children:i.jsx(F,{className:"h-5 w-5"})},"add-btn"):i.jsx(p.div,{initial:{scale:.8,opacity:0},animate:{scale:1,opacity:1},exit:{scale:.8,opacity:0},transition:{duration:.15},children:i.jsx(z,{quantity:$,onIncrement:P,onDecrement:S,disabled:!w,compact:!0})},"stepper")})]})]})]})})}export{W as K};
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.