1import{bJ as U,at as K,ay as Z,S as J,db as Y,c$ as H,ca as F,bs as M,bh as W,bV as h,cK as X,am as x,dm as N,d0 as ee}from"./DtGgvzh8.js";import{u as te}from"./DG4G73sz.js";const oe={class:"flex flex-col md:flex-row items-end md:items-center gap-1"},ae={__name:"PageSizeSelect",props:{modelValue:[String,Number],options:Array},emits:["update:modelValue"],setup(a){return(p,l)=>{const n=J;return U(),K("div",oe,[Z(n,{modelValue:a.modelValue,"onUpdate:modelValue":l[0]||(l[0]=v=>p.$emit("update:modelValue",v)),options:a.options,class:"py-2 text-sm",variant:"outline",color:"primary",ui:{wrapper:"flex items-center"}},null,8,["modelValue","options"])])}}},Q=48,z=a=>a?.name==="AbortError"||a?.cause?.name==="AbortError",ue=()=>{const{applyBrandingToProducts:a}=te(),{trackViewItemList:p}=X(),{user:l}=Y(),n=h([]),v=h({category:[],category_slug:[],brand:[],sleeve_info:[],gender:[],garment_type:[],fabric:[],colour:[],size:[],sub_category:[],type_slug:[],lead_time_name:[],total_available_quantity:[],pricing:[],quantity_sort:[],pricing_sort:[],on_promotion:!1}),q=h({}),k=h(!0),E=h(!1),r=h(!1),b=h(0),y=h(0),_=h(0),i=h(!1),I=h({}),A=H();let O=null;const T=e=>Math.min(...(e.product_items||[]).map(u=>u.price)),c=e=>{const u=e.requestOptions?.listingType||"category-sub_categories",{product_grouping_id:f,...m}=e.filters??{},o={listing_type:u,page:e.page,limit:e.limit,filters:m,...Number.isInteger(f)&&{product_grouping_id:f},...e.sort&&{sort:e.sort},...typeof e.offset=="number"&&{offset:e.offset}};return u==="search-results"?(o.search_string=e.requestOptions?.searchString||e.category,o.auto_complete_limit=1,o):(u==="shop-by"||(o.category=e.requestOptions?.categorySlug||e.category),o)},S=e=>{v.value={category:e.filters.category||[],category_slug:e.filters.category_slug||[],brand:e.filters.brand||[],sleeve_info:e.filters.sleeve_info||[],gender:e.filters.gender||[],garment_type:e.filters.garment_type||[],fabric:e.filters.fabric||[],colour:e.filters.colour.map(u=>({name:u.colour,hex:u.hex_code}))||[],size:e.filters.size||[],sub_category:e.filters.sub_category||[],type_slug:e.filters.type_slug||[],lead_time_name:e.filters.lead_time_name||[],total_available_quantity:e.filters.total_available_quantity||[],pricing:e.filters.pricing||[],quantity_sort:["asc","desc"],pricing_sort:["asc","desc"],on_promotion:e.filters.on_promotion||!1}};return{products:n,filterOptions:v,filterNameOverrides:q,hasListingBanner:i,loading:k,loadingMore:E,loadingError:r,pageCount:b,lastPageLoaded:y,totalProducts:_,listingBannerInfo:I,fetchListingBannerInfo:async(e,u)=>{if(i.value=!1,!e){I.value={};return}try{const f=await $fetch("/api/product-listing-banner",{method:"POST",body:{category_slug:F(e),sub_category_slug:F(u)}});I.value=f,f?.banner_image?.id?i.value=!0:i.value=!1}catch(f){i.value=!1,console.error("Error fetching listing banner options:",f)}},fetchProducts:async e=>{O&&O.abort(),r.value=!1;let u=e.page;b.value>0&&e.page>b.value&&(u=b.value);const f=new AbortController;O=f;const m=()=>O===f;k.value=!0;try{const o={type:"item",...e.selectedFilters&&typeof e.selectedFilters=="object"?e.selectedFilters:{},sale:e.sortOption==="last-buy"||e.lastBuy||e.selectedFilters?.sale||!1};(e.sortOption==="desc"||e.sortOption==="asc")&&(o.quantity_sort=e.sortOption),e.sortOption==="price-low"&&(o.pricing_sort="asc"),e.sortOption==="price-high"&&(o.pricing_sort="desc"),e.sortOption==="popular"&&(o.popular_sort="desc");const L=e.sortOption!=="desc"&&e.sortOption!=="asc"&&e.sortOption!=="last-buy"?e.sortOption:void 0;let C,B=e.requestOptions?.categorySlug||F(e.category);try{C=await $fetch("/api/product-listing",{method:"POST",signal:f.signal,body:c({category:B,page:u,limit:e.limit??Q,filters:o,...L&&{sort:L},requestOptions:e.requestOptions})})}catch(t){if(z(t))return;console.error("Product listing API error:",t),m()&&(r.value=!0);return}if(!m())return;try{let t=e.category;(!t||t==="")&&(t="apparel");let d={category_slug:F(t)};e.subcategory&&(d={...d,sub_category_slug:F(e.subcategory)});const P=await $fetch("/api/product-listing-filter-names",{method:"POST",body:d});q.value=P}catch{q.value={}}if(!m())return;const g=C;g?.filters&&S(g);let V=[];const j=[...g?.products.map((t,d)=>({item_id:W(t),item_name:t.name||t.product_description||t.description,item_variant:t?.stock_id||t?.id||t?.item_number||t?.stock_code,item_brand:t?.brand||t?.supplier,category:t.category,category_slug:`/category/${A.path.replace("/products/","")}`,price:t.price||t.min_price,index:d,type:"item"}))],s={...Object.fromEntries(Object.entries(o).map(([t,d])=>[t,typeof d=="object"?Object.values(d):d])),sub_categories:[e.subcategory]};g?.products&&(p("Product Listing",j,l.value,"",g?.guid??"",s),n.value=g?.products,b.value=g?.total_pages,_.value=g?.total_products??0,V=g?.products?.map(t=>
1({item_id:String(t.stock_header_id),item_name:t.product_description,price:T(t)}))),y.value=e.page;const w=n.value?.map(t=>t.stock_header_id);if(w?.length)try{const t=await $fetch("/api/product/pulse/product-list",{method:"POST",body:{stock_header_ids:w}});for(const d of t)for(let P=0;P<n.value.length;P++){let R=n.value[P];n.value[P].pulseImage="",R.stock_header_id===d.stockheaderID&&(R.pulse_data=d)}}catch(t){console.warn("Pulse API failed, continuing without pulse data:",t)}try{await a(n.value)}catch(t){console.warn("Branding failed, continuing without branding:",t)}await M()}catch(o){if(z(o))return;m()&&(r.value=!0),console.error("Error loading products:",o)}finally{m()&&(k.value=!1)}},fetchProductsDelta:async e=>{if(e.count<=0)return;O&&O.abort();const u=n.value.length;r.value=!1,E.value=!0;const f=new AbortController;O=f;const m=()=>O===f;try{const o={type:"item",...e.selectedFilters&&typeof e.selectedFilters=="object"?e.selectedFilters:{},sale:e.sortOption==="last-buy"||e.lastBuy||e.selectedFilters?.sale||!1};(e.sortOption==="desc"||e.sortOption==="asc")&&(o.quantity_sort=e.sortOption),e.sortOption==="price-low"&&(o.pricing_sort="asc"),e.sortOption==="price-high"&&(o.pricing_sort="desc"),e.sortOption==="popular"&&(o.popular_sort="desc");const L=e.sortOption!=="desc"&&e.sortOption!=="asc"&&e.sortOption!=="last-buy"?e.sortOption:void 0,C=e.requestOptions?.categorySlug||F(e.category),B=await $fetch("/api/product-listing",{method:"POST",signal:f.signal,body:c({category:C,page:1,limit:e.count,offset:u,filters:o,...L&&{sort:L},requestOptions:e.requestOptions})});if(!m())return;const g=B?.products??[];if(g.length){try{const s=g.map(t=>t.stock_header_id),w=await $fetch("/api/product/pulse/product-list",{method:"POST",body:{stock_header_ids:s}});for(const t of w)for(const d of g)d.pulseImage="",d.stock_header_id===t.stockheaderID&&(d.pulse_data=t)}catch(s){console.warn("Pulse API failed, continuing without pulse data:",s)}try{await a(g)}catch(s){console.warn("Branding failed, continuing without branding:",s)}if(!m())return;const V=g.map((s,w)=>({item_id:s.stock_header_id,item_name:s.name||s.product_description||s.description,item_variant:s?.stock_id||s?.id||s?.item_number||s?.stock_code,item_brand:s?.brand||s?.supplier,category:s.category,category_slug:`/category/${A.path.replace("/products/","")}`,price:s.price||s.min_price,index:u+w,type:"item"})),j={...Object.fromEntries(Object.entries(o).map(([s,w])=>[s,typeof w=="object"?Object.values(w):w])),sub_categories:[e.subcategory]};p("Product Listing",V,l.value,"",B?.guid??"",j),n.value=[...n.value,...g]}_.value=B?.total_products??_.value,await M()}catch(o){if(z(o))return;m()&&(r.value=!0),console.error("Error loading more products:",o)}finally{m()&&(E.value=!1)}},callAbortControllers:()=>{O&&O.abort()}}},re=64,D=16,ge=a=>{const p=h(0),l=()=>{typeof document>"u"||(p.value=document.querySelector("header")?.offsetHeight||re)},n=x(()=>a?.value?D:p.value+D),v=x(()=>`calc(100vh - ${n.value+D}px)`);return{headerHeight:p,calculateStickyTop:l,filterStickyTop:n,filterStickyMaxHeight:v}},G=[12,24,48,96,192,300],de=(a,p)=>{const l=h(Q),n=p??1/0,v=x(()=>{const r=a.value,b=G.filter(i=>i<=n);if(r<=0)return b.map(i=>({value:i,label:`Show ${i}`}));const y=b.filter(i=>i<r).map(i=>({value:i,label:`Show ${i}`})),_=Math.min(r,n);return y.push({value:_,label:_===r?"Show all":`Show ${_}`}),y}),q=(r,b)=>{if(!b||b<=0)return r;const y=v.value.map(i=>i.value);if(y.includes(r))return r;const _=y.filter(i=>i<=r);return _.length?Math.max(..._):y.length?Math.min(...y):Q},k=x(()=>q(l.value,a.value)),E=x(()=>l.value>0?Math.ceil(a.value/l.value):0);return{pageSize:l,pageSizeForSelect:k,PAGE_SIZE_CANDIDATES:G,pageSizeOptions:v,clampPageSize:q,pageCount:E}},pe=a=>{const{page:p,pageSize:l,sortOption:n,defaultPageSize:v,defaultSort:q,onChange:k,extraGuard:E}=a,r=H(),b=ee(),y=h(0),_=x(()=>y.value>0),i=()=>{const c=Number(r.query.page);return Number.isInteger(c)&&c>0?c:1},I=()=>{const c=Number(r.query.show);return Number.isInteger(c)&&c>0?c:v},A=()=>{const c=r.query.sort;return typeof c=="string"&&c?c:q},O=async(c="replace")=>
1{const S={...r.query};p.value>1?S.page=String(p.value):delete S.page,l.value!==v?S.show=String(l.value):delete S.show,n.value!==q?S.sort=n.value:delete S.sort,y.value++;try{await b[c]({path:r.path,query:S}),await M()}finally{y.value--}},T=async()=>{if(_.value||E?.())return;const c=i(),S=I(),$=A();c===p.value&&S===l.value&&$===n.value||(p.value=c,l.value=S,n.value=$,await k())};return N(()=>r.query.page,T),N(()=>r.query.show,T),N(()=>r.query.sort,T),{isUpdatingPageQuery:_,getPageFromQuery:i,getPageSizeFromQuery:I,getSortFromQuery:A,syncPageToRoute:O}};export{Q as D,ae as _,de as a,ue as b,ge as c,z as i,pe as u};
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.