1import{j as e,i9 as Z,ia as W,hZ as X}from"./vendor-data-BP8BSDuA.js";import{r as l,f as Y,u as ee,o as te,L as q}from"./vendor-react-1O7TF95s.js";import{fk as ae,fh as F,dL as re,fi as se,aC as de,a as le,u as ne,fv as oe}from"./index-C0uz6wQM.js";import{u as ie}from"./useTrackScreen-BTu7vJIr.js";import{eJ as R,hc as ce,hd as xe,he as ue,hf as me,hg as be,eI as A}from"./vendor-zod-DLSbZ067.js";import{S as he}from"./ShopHeader-DJl5higz.js";function pe(r,a,n){return n?"Out of Stock":a?`Add to Cart â ${R(r)}`:"Select Options"}function fe({total:r,isPending:a,isError:n,allVariantsSelected:s,selectedSkuOutOfStock:o,addedToCart:d,onAdd:t,onContinueShopping:i,onGoToCart:u}){const w=pe(r,s,o),z=!s||o;return e.jsxs(e.Fragment,{children:[d?e.jsxs("div",{className:"space-y-2.5",children:[e.jsxs("button",{type:"button",onClick:u,className:"w-full py-3.5 rounded-full font-semibold text-base flex items-center justify-center gap-2 bg-brand hover:bg-brand/90 text-text-on-brand transition-all",children:["Go to Cart ",e.jsx(ae,{size:18})]}),e.jsxs("button",{type:"button",onClick:i,className:"w-full py-2.5 rounded-full font-medium text-sm flex items-center justify-center gap-2 border border-border dark:border-border-dark text-text dark:text-text-dark hover:bg-bg-elevated dark:hover:bg-bg-elevated-dark transition-colors",children:[e.jsx(F,{size:16}),"Continue Shopping"]})]}):e.jsx("button",{type:"button",onClick:t,disabled:z||a,className:"w-full py-3.5 rounded-full font-semibold text-base flex items-center justify-center gap-2 bg-brand hover:bg-brand/90 text-text-on-brand disabled:opacity-70 disabled:cursor-not-allowed transition-all",children:a?e.jsx("div",{className:"w-5 h-5 border-2 border-white border-t-transparent rounded-full animate-spin"}):e.jsxs(e.Fragment,{children:[e.jsx(F,{size:20}),w]})}),n&&e.jsx("p",{className:"text-sm text-error mt-2 text-center",role:"alert",children:"Failed to add to cart. Please try again."}),e.jsxs("div",{className:"flex items-center justify-center gap-1.5 mt-3 text-xs text-text-secondary dark:text-text-secondary-dark",children:[e.jsx(re,{size:14}),e.jsx("span",{children:"Secure checkout"})]})]})}const ke=r=>r.source_url||r.url||"";function ge({images:r,fallbackUrl:a,alt:n,selectedIndex:s,onSelect:o}){const d=l.useMemo(()=>r.map(ke),[r]),t=d[s]||a||"";return e.jsxs("div",{className:"lg:w-1/2",children:[e.jsx("div",{className:"aspect-square rounded-xl overflow-hidden bg-bg-elevated dark:bg-bg-elevated-dark mb-3",children:t?e.jsx("img",{src:t,alt:n,className:"w-full h-full object-contain"}):e.jsx("div",{className:"w-full h-full flex items-center justify-center",children:e.jsx(F,{size:48,className:"text-text-secondary dark:text-text-secondary-dark"})})}),r.length>1&&e.jsx("div",{className:"flex gap-2 overflow-x-auto scrollbar-hide pb-1",children:r.map((i,u)=>e.jsx("button",{type:"button",onClick:()=>o(u),"aria-label":`Product image ${u+1}`,className:`flex-shrink-0 w-16 h-16 rounded-lg overflow-hidden border-2 transition-colors ${u===s?"border-brand":"border-transparent hover:border-border dark:hover:border-border-dark"}`,children:e.jsx("img",{src:d[u],alt:"",className:"w-full h-full object-cover"})},i.id||u))})]})}function je({value:r,onChange:a,min:n=1,max:s=10}){return e.jsxs("div",{className:"mb-6",children:[e.jsx("label",{className:"block text-sm font-medium text-text dark:text-text-dark mb-2",children:"Quantity"}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("button",{type:"button",onClick:()=>a(Math.max(n,r-1)),disabled:r<=n,"aria-label":"Decrease quantity",className:"w-10 h-10 rounded-full border border-border dark:border-border-dark flex items-center justify-center hover:bg-bg-elevated dark:hover:bg-bg-elevated-dark disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:e.jsx(se,{size:18})}),e.jsx("span",{className:"text-lg font-medium w-8 text-center text-text dark:text-text-dark","aria-live":"polite",children:r}),e.jsx("button",{type:"button",onClick:()=>a(Math.min(s,r+1)),disabled:r>=s,"aria-label":"Increase quantity",className:"w-10 h-10 rounded-full border border-border dark:border-border-dark flex items-center justify-center hover:bg-bg-elevated dark:hover:bg-bg-elevated-dark disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:e.jsx(de,{size:18})})]})]})}function ve({chart:r,measurementVariants:a,sizeVariantName:n,selectedSize:s,onSelectSize:o}){return r.length===0||!n?null:e.jsxs("div",{className:"mb-5",children:[e.jsx("label",{className:"block text-sm font-medium text-text dark:text-text-dark mb-2",children:"Size Chart"}),e.jsx("div",{className:"overflow-x-auto -mx-4 px-4 sm:mx-0 sm:px-0",children:e.jsxs("table",{className:"w-full text-sm border-collapse min-w-[320px]",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-bg-elevated dark:bg-bg-elevated-dark",children:[e.jsx("th",{className:"text-left py-2.5 px-3 font-semibold text-text dark:text-text-dark border-b border-border dark:border-border-dark",children:"Size"}),a.map(d=>e.jsx("th",{className:"text-center py-2.5 px-3 font-semibold text-text dark:text-text-dark border-b border-border dark:border-border-dark",children:d.name.replace(/\s*circumference/i,"")},d.name))]})}),e.jsx("tbody",{children:r.map(d=>{const t=s===d.size;return e.jsxs("tr",{role:"button",tabIndex:0,"aria-pressed":t,"aria-label":`Select size ${d.size}`,onClick:()=>o(d.size),onKeyDown:i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),o(d.size))}
1,className:`cursor-pointer border-b border-border dark:border-border-dark transition-colors hover:bg-bg-elevated dark:hover:bg-bg-elevated-dark focus:outline-none focus-visible:bg-bg-elevated dark:focus-visible:bg-bg-elevated-dark focus-visible:ring-2 focus-visible:ring-brand ${t?"bg-bg-elevated dark:bg-bg-elevated-dark":""}`,children:[e.jsx("td",{className:`py-2.5 px-3 font-medium ${t?"text-brand font-semibold":"text-text dark:text-text-dark"}`,children:d.size}),a.map(i=>e.jsx("td",{className:"text-center py-2.5 px-3 text-text-secondary dark:text-text-secondary-dark",children:d.measurements[i.name]?.name||"â"},i.name))]},d.sizeId)})})]})})]})}function ye({variants:r,selected:a,onSelect:n}){return r.length===0?null:e.jsx(e.Fragment,{children:r.map(s=>{const o=s.values.find(t=>t.name===a[s.name]),d=ce(s.name,s.values);return e.jsxs("div",{className:"mb-5",children:[e.jsxs("label",{className:"block text-sm font-medium text-text dark:text-text-dark mb-2",children:[s.name,o?`: ${o.name}`:""]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:(d??s.values).map(t=>{const i=a[s.name]===t.name;return e.jsx("button",{type:"button",onClick:()=>n(s.name,t.name),"aria-pressed":i,className:i?"rounded-lg px-3 py-1.5 text-sm border border-brand bg-bg-elevated dark:bg-bg-elevated-dark text-brand font-medium":"rounded-lg px-3 py-1.5 text-sm border border-border dark:border-border-dark bg-transparent text-text dark:text-text-dark hover:bg-bg-elevated dark:hover:bg-bg-elevated-dark transition-colors",children:t.name},t.id)})})]},s.name)})})}function Ne(r){const{data:a,isLoading:n,error:s}=Z(r??""),[o,d]=l.useState(0),[t,i]=l.useState({}),[u,w]=l.useState(1),[z,L]=l.useState(!1),y=l.useMemo(()=>a?.albums?.length?a.albums.flatMap(c=>c.media).filter(c=>c.url||c.source_url):[],[a]),p=l.useMemo(()=>a?.variants??[],[a?.variants]),f=l.useMemo(()=>a?.skus??[],[a?.skus]),{selectableVariants:m,measurementVariants:_}=l.useMemo(()=>{const c=[],b=[];for(const h of p)xe.test(h.name)?b.push(h):c.push(h);return{selectableVariants:c,measurementVariants:b}},[p]),j=l.useMemo(()=>m.find(c=>/size/i.test(c.name))?.name,[m]),N=l.useMemo(()=>ue(f,m,_),[m,_,f]),x=l.useMemo(()=>me(f,m,t,p),[f,m,t,p]),{allVariantsSelected:M,stockBadgeStatus:V,selectedSkuOutOfStock:I,maxQuantity:S}=l.useMemo(()=>be(f,m,t,x,a?.available),[f,m,t,x,a?.available]);l.useEffect(()=>{S!=null&&u>S&&w(S)},[S,u]);const Q=x?.sale_price??x?.retail_price??a?.min_price??0,k=x?.sale_price&&x?.retail_price&&x.sale_price<x.retail_price?x.retail_price:null,g=l.useCallback((c,b)=>{i(h=>{const U={...h,[c]:b};if(/size/i.test(c)&&N){const T=N.find(C=>C.sizeId===b);if(T)for(const[C,B]of Object.entries(T.measurements))U[C]=B.name}return U})},[N]),P=l.useCallback(c=>{j&&g(j,c)},[j,g]),v=j?t[j]:void 0,O=y[o]&&(y[o].source_url||y[o].url)||a?.default_image_url||"";return{product:a,isLoading:n,error:s,images:y,selectedImageIndex:o,setSelectedImageIndex:d,mainImageUrl:O,variants:p,selectableVariants:m,measurementVariants:_,selectedVariants:t,sizeVariantName:j,selectedSize:v,sizeChart:N,allVariantsSelected:M,stockBadgeStatus:V,selectedSkuOutOfStock:I,maxQuantity:S,handleVariantSelect:g,handleSelectSize:P,skus:f,selectedSku:x,displayPrice:Q,originalPrice:k,quantity:u,setQuantity:w,addedToCart:z,setAddedToCart:L}}function Ve(){ie("ProductDetail");const r=le(),a=Y(),n=ee(),{productId:s}=te(),o=ne($=>$.isLoggedIn),d=Ne(s),{product:t,isLoading:i,error:u,images:w,selectedImageIndex:z,setSelectedImageIndex:L,mainImageUrl:y,selectableVariants:p,measurementVariants:f,selectedVariants:m,sizeVariantName:_,selectedSize:j,sizeChart:N,allVariantsSelected:x,stockBadgeStatus:M,selectedSkuOutOfStock:V,maxQuantity:I,handleVariantSelect:S,handleSelectSize:Q,selectedSku:k,displayPrice:g,originalPrice:P,quantity:v,setQuantity:O,addedToCart:c,setAddedToCart:b}=d,h=W(),T=X({enabled:o}).data?.count??0;l.useEffect(()=>{!r||!t||!s||r.trackProductViewed({productId:s,productCategory:t.category,creatorId:t.seller})},[r,s,t?.id,t?.category,t?.seller]);const C=l.useCallback(()=>{n.key==="default"?a("/shop",{replace:!0}):a(-1)},[n.key,a]),B=l.useCallback(()=>{b(!1),C()},[C,b]),J=l.useCallback(async()=>
1{if(!t||!k||V||!x||I!=null&&v>I)return;const $=p.map(E=>{const H=m[E.name];return H?`${E.name}: ${H}`:null}).filter(Boolean).join(", "),K=$?`${A(k.name||t.name)} (${$})`:A(k.name||t.name),G={product_id:t.product_id,merchant_id:t.merchant_id,name:K,price:g,sku_id:String(k.sku_id||k.id),external_id:k.external_id??t.external_id,thumbnail:y||t.default_image_url||"",quantity:v};try{await h.mutateAsync(G),r?.trackAddToCart({productId:String(t.id),price:G.price,quantity:v,creatorId:t.seller}),b(!0)}catch(E){console.error("Failed to add to cart:",E)}},[t,p,m,k,g,y,v,h,r,b,V,x,I]),D=e.jsx(he,{cartCount:T,onBack:C,title:"Product",showSearch:!1});return i?e.jsxs("div",{children:[D,e.jsxs("div",{className:"px-4 py-6 animate-pulse flex flex-col lg:flex-row gap-8",children:[e.jsx("div",{className:"lg:w-1/2",children:e.jsx("div",{className:"aspect-square rounded-xl bg-bg-elevated dark:bg-bg-elevated-dark"})}),e.jsxs("div",{className:"lg:w-1/2 space-y-4",children:[e.jsx("div",{className:"h-8 bg-bg-elevated dark:bg-bg-elevated-dark rounded w-3/4"}),e.jsx("div",{className:"h-5 bg-bg-elevated dark:bg-bg-elevated-dark rounded w-1/3"}),e.jsx("div",{className:"h-10 bg-bg-elevated dark:bg-bg-elevated-dark rounded w-1/4"}),e.jsx("div",{className:"h-20 bg-bg-elevated dark:bg-bg-elevated-dark rounded"})]})]})]}):u||!t?e.jsxs("div",{children:[D,e.jsxs("div",{className:"px-4 py-20 text-center",children:[e.jsx("h2",{className:"text-xl font-medium text-text dark:text-text-dark mb-2",children:"Product not found"}),e.jsx("p",{className:"text-sm text-text-secondary dark:text-text-secondary-dark mb-4",children:"This product may no longer be available."}),e.jsx(q,{to:"/shop",className:"text-brand hover:underline text-sm font-medium",children:"Back to Shop"})]})]}):e.jsxs("div",{children:[D,e.jsxs("div",{className:"px-4 pb-6 pt-4",children:[e.jsxs("nav",{"aria-label":"Breadcrumb",className:"flex items-center gap-2 text-sm text-text-secondary dark:text-text-secondary-dark mb-4",children:[e.jsx(q,{to:"/shop",className:"hover:text-text dark:hover:text-text-dark transition-colors",children:"Shop"}),e.jsx("span",{children:"/"}),e.jsx("span",{className:"text-text dark:text-text-dark truncate",children:A(t.name)})]}),e.jsxs("div",{className:"flex flex-col lg:flex-row gap-8",children:[e.jsx(ge,{images:w,fallbackUrl:t.default_image_url,alt:A(t.name),selectedIndex:z,onSelect:L}),e.jsxs("div",{className:"lg:w-1/2",children:[t.seller&&e.jsx("p",{className:"text-sm mb-1",children:e.jsx(q,{to:`/shop/${encodeURIComponent(t.seller)}`,className:"text-brand font-medium hover:underline",children:t.seller})}),e.jsx("h1",{className:"text-2xl font-semibold text-text dark:text-text-dark mb-4",children:A(t.name)}),e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[e.jsx("span",{className:"text-3xl font-bold text-text dark:text-text-dark",children:R(g)}),P&&P!==g&&e.jsx("span",{className:"text-lg text-text-secondary dark:text-text-secondary-dark line-through",children:R(P)})]}),e.jsx("div",{className:"flex flex-wrap gap-2 mb-6",children:e.jsx("span",{className:`flex items-center gap-1 text-xs font-medium px-2.5 py-1 rounded-full bg-bg-elevated dark:bg-bg-elevated-dark ${M==="in_stock"?"text-success":"text-error"}`,children:M==="in_stock"?"In Stock":"Out of Stock"})}),e.jsx(ye,{variants:p,selected:m,onSelect:S}),N&&e.jsx(ve,{chart:N,measurementVariants:f,sizeVariantName:_,selectedSize:j,onSelectSize:Q}),e.jsx(je,{value:v,onChange:O,max:I??10}),e.jsx(fe,{total:g*v,isPending:h.isPending,isError:h.isError,allVariantsSelected:x,selectedSkuOutOfStock:V,addedToCart:c,onAdd:J,onContinueShopping:B,onGoToCart:()=>a("/shop/cart")}),t.description&&e.jsxs("div",{className:"mt-8 pt-6 border-t border-border dark:border-border-dark",children:[e.jsx("h2",{className:"text-lg font-semibold text-text dark:text-text-dark mb-3",children:"Description"}),e.jsx("div",{className:"overflow-x-auto text-text dark:text-text-dark",children:e.jsx(oe,{html:t.description})})]})]})]})]})]})}export{Ve 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.