{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/A55TPw8oJtDToWtsjcDZ/efvR3aKErSMemVA7DBdP/filterMappings.js", "ssg:https://framerusercontent.com/modules/C5s4mO0gBJtqskC4YAhz/MEadtt1HqvclACBtUYnM/FC_CatalogFilterButton.js", "ssg:https://framerusercontent.com/modules/Hk0F8C2ru2KtdcLr7KmL/E6WMIzPeV3m14tYvXG7W/FC_CatalogDisplay.js", "ssg:https://framerusercontent.com/modules/9KHRmXb0ww1T2NvhEZ29/EDEJgFXmgQz0WeulSAB4/hd2gbXUgi.js"],
  "sourcesContent": ["export const getFilterValue=(property,options)=>{if(property.startsWith(\"variant_\")){return{type:\"variant\",value:{[property]:options.value}};}switch(property){case\"product_type\":case\"product_tag\":case\"collection\":return{type:property,value:options.value};case\"price\":return{type:\"price\",// value: options.price_ranges.map((range: string) => {\n//     const [min, max] = range.split('-').map(Number);\n//     return { min, max };\n// }),\nvalue:options.values.map(value=>{if(value.priceType===\"Under\"){return{min:null,max:value.max}// Handle \"Under\" case\n;}else if(value.priceType===\"Over\"){return{min:value.min,max:null}// Handle \"Over\" case\n;}else{const[min,max]=value.split(\"-\").map(Number);return{min,max}// Handle regular range\n;}})};case\"discount_amount\":return{type:\"discount_amount\",value:options.discount_amount_min?{min:options.discount_amount_min,max:options.discount_amount_max}:options.discount_amount};case\"discount_percent\":return{type:\"discount_percent\",value:options.discount_percent_min?{min:options.discount_percent_min,max:options.discount_percent_max}:options.discount_percent};case\"on_sale\":case\"in_stock\":case\"bundle\":case\"subscription\":return{type:property,value:options.value===\"true\"};default:return{type:property,value:\"\"};}};/**\n * Convert legacy filter names to new format and vice versa\n */export const convertFilterName=(name,toLegacy=false)=>{//console.log('convertFilterName input:', name, 'toLegacy:', toLegacy);\nconst mappings={// New format to legacy format\nproduct_type:\"product-type\",product_tag:\"product-tag\",on_sale:\"on-sale\",in_stock:\"in-stock\",bundle:\"bundles\",subscription:\"subscriptions\"};if(toLegacy){const result=mappings[name]||name;//console.log('convertFilterName output (toLegacy):', result);\nreturn result;}else{// Legacy format to new format\nconst reverseMappings={};Object.entries(mappings).forEach(([key,value])=>{reverseMappings[value]=key;});const result=reverseMappings[name]||name;//console.log('convertFilterName output (fromLegacy):', result);\nreturn result;}};/**\n * Parses URL parameters and converts them into filter state\n *\n * URL format conventions:\n * 1. Between different filter types: Always use AND logic with separate parameters\n *    (e.g., ?product_type=shirts&collection=summer)\n *\n * 2. Within the same filter type:\n *    - For collection, product_type, product_tag: Use comma-separated values for OR logic\n *      (e.g., ?product_type=shirts,pants,jackets means products that are shirts OR pants OR jackets)\n *    - For variant filters:\n *      a) Comma-separated values indicate OR logic\n *         (e.g., ?variant_color=blue,red,green means blue OR red OR green)\n *      b) Repeated parameters indicate AND logic\n *         (e.g., ?variant_color=blue&variant_size=large means blue AND large)\n */export const parseUrlFilters=urlParams=>{console.log(\"Parsing URL filters from:\",urlParams.toString());const filters={collection:{active:false,values:[]},product_type:{active:false,values:[]},product_tag:{active:false,values:[]},variant:{active:false,values:[]},price:{active:false,values:[]},discount_amount:{active:false,values:[]},discount_percent:{active:false,values:[]},on_sale:{active:false,value:true},in_stock:{active:false,value:true},bundle:{active:false,value:true},subscription:{active:false,value:true}};[\"collection\",\"product_type\",\"product_tag\",\"product-type\",\"product-tag\"].forEach(filterType=>{const value=urlParams.get(filterType);if(value){const normalizedType=convertFilterName(filterType);console.log(`Found filter ${filterType}, normalized to ${normalizedType}:`,value);// Split by comma for OR logic between values\nconst values=value.split(\",\").filter(Boolean);filters[normalizedType].values=values;filters[normalizedType].active=values.length>0;}});// Process variant filters (variant_color, variant_size, etc.)\n// Support both comma-separated values (OR logic) and multiple params with same name (AND logic between different options)\nArray.from(urlParams.keys()).forEach(key=>{if(key.startsWith(\"variant_\")){const variantName=key.replace(\"variant_\",\"\");const value=urlParams.get(key);if(value){// Decode the value first to handle any URL encoding\nconst decodedValue=decodeURIComponent(value);// Log the variant filter values being processed\nconsole.log(`Parsing variant filter ${key}:`,{rawValue:value,decodedValue,isMultiValue:decodedValue.includes(\",\")});// Split by comma for OR logic between values of the same option\nconst values=decodedValue.split(\",\").filter(Boolean);// Each value is an OR option for this variant type\nvalues.forEach(val=>{filters.variant.values.push({name:variantName,value:val.trim()});});console.log(`Found variant filter ${key}:`,{values,orLogic:\"Values within same variant type use OR logic\"});}}});filters.variant.active=filters.variant.values.length>0;// Process price filters\nconst priceRanges=urlParams.get(\"price\");const priceMax=urlParams.get(\"price_max\");const priceMin=urlParams.get(\"price_min\");filters.price={active:false,values:[]};if(priceRanges){// Handle regular price ranges\nconst ranges=priceRanges.split(\",\").map(range=>{const[min,max]=range.split(\"-\").map(Number);return{min,max,priceType:\"Range\"};});filters.price.values.push(...ranges);filters.price.active=true;}if(priceMax){// Handle \"Under\" price ranges\nconst maxValues=priceMax.split(\",\").map(Number);const underRanges=maxValues.map(max=>({min:null,max,priceType:\"Under\"}));filters.price.values.push(...underRanges);filters.price.active=true;}// Handle \"Over\" price ranges\nif(priceMin){const minValues=priceMin.split(\",\").map(Number);minValues.forEach(min=>{filters.price.values.push({min,max:null,priceType:\"Over\"});});filters.price.active=true;}// Process discount filters\nconst discountAmount=urlParams.get(\"discount_amount\");if(discountAmount){const ranges=discountAmount.split(\",\").map(range=>{const[min,max]=range.split(\"-\").map(Number);return{min,max};});filters.discount_amount={active:true,values:ranges};}const discountAmountMin=urlParams.get(\"discount_amount_min\");if(discountAmountMin){const minValues=discountAmountMin.split(\",\").map(Number);if(!filters.discount_amount){filters.discount_amount={active:true,values:[]};}// Add each min value as a range with null max\nminValues.forEach(min=>{filters.discount_amount.values.push({min,max:null});});filters.discount_amount.active=true;}const discountPercent=urlParams.get(\"discount_percent\");if(discountPercent){const ranges=discountPercent.split(\",\").map(range=>{const[min,max]=range.split(\"-\").map(Number);return{min,max};});filters.discount_percent={active:true,values:ranges};}const discountPercentMin=urlParams.get(\"discount_percent_min\");if(discountPercentMin){const minValues=discountPercentMin.split(\",\").map(Number);if(!filters.discount_percent){filters.discount_percent={active:true,values:[]};}// Add each min value as a range with null max\nminValues.forEach(min=>{filters.discount_percent.values.push({min,max:null});});filters.discount_percent.active=true;}[\"on_sale\",\"in_stock\",\"bundle\",\"subscription\"].forEach(filterType=>{const value=urlParams.get(filterType);if(value===\"true\"){filters[filterType]={active:true,value:true};}});return filters;};/**\n * Updates URL parameters based on current filter state\n *\n * URL format conventions:\n * 1. Between different filter types: Always use AND logic with separate parameters\n *\n * 2. Within the same filter type:\n *    - For collection, product_type, product_tag: Use comma-separated values for OR logic\n *    - For variant filters:\n *      a) Group variants by name and use comma-separated values for OR logic within same variant type\n *      b) Different variant types use AND logic with separate parameters\n */export const updateUrlWithFilters=(filters,url)=>{console.log(\"Updating URL with filters:\",filters);// Clear existing filter params\nArray.from(url.searchParams.keys()).filter(key=>key.startsWith(\"variant_\")||[\"product_type\",\"product_tag\",\"collection\",\"price\",\"price_min\",\"price_max\",\"discount_amount\",\"discount_amount_min\",\"discount_percent\",\"discount_percent_min\",\"on_sale\",\"in_stock\",\"bundle\",\"subscription\",// Also include legacy filter names\n    \"product-type\",\"product-tag\",\"on-sale\",\"in-stock\",\"bundles\",\"subscriptions\"].includes(key)).forEach(key=>url.searchParams.delete(key));[\"collection\",\"product_type\",\"product_tag\"].forEach(filterType=>{if(filters[filterType]?.active&&filters[filterType]?.values?.length>0){url.searchParams.set(filterType,filters[filterType].values.join(\",\"));console.log(`Set URL param ${filterType}=`,filters[filterType].values.join(\",\"));}});// Add variant filters\n// Group variant values by name, and each group uses comma-separated values for OR logic\nif(filters.variant?.active&&filters.variant?.values?.length>0){// Group variant values by name\nconst variantGroups={};filters.variant.values.forEach(variant=>{// Use lowercase name for case-insensitive grouping\nconst normalizeName=`variant_${variant.name}`;if(!variantGroups[normalizeName]){variantGroups[normalizeName]=[];}// Avoid adding duplicate values\nif(!variantGroups[normalizeName].some(v=>v.toLowerCase()===variant.value.toLowerCase())){variantGroups[normalizeName].push(variant.value);}});// Add each variant group to URL with comma-separated values (OR logic)\nObject.entries(variantGroups).forEach(([key,values])=>{// Don't encode the values here as URLSearchParams will handle that\nurl.searchParams.set(key,values.join(\",\"));console.log(`Set URL param ${key}=`,values.join(\",\"),\"(OR logic between values)\");});}// Add price filters\nif(filters.price?.active&&filters.price.values?.length>0){// const regularRanges = [];\n// const underMaxValues = [];\n// const overMinValues = [];\nconst regularRanges=[];const underMaxValues=[];const overMinValues=[];filters.price.values.forEach(range=>{if(range.priceType===\"Under\"){underMaxValues.push(range.max);}else if(range.priceType===\"Over\"){overMinValues.push(range.min);}else{regularRanges.push(`${range.min}-${range.max}`);}});if(regularRanges.length>0){url.searchParams.set(\"price\",regularRanges.join(\",\"));}if(underMaxValues.length>0){url.searchParams.set(\"price_max\",underMaxValues.join(\",\"));}if(overMinValues.length>0){url.searchParams.set(\"price_min\",overMinValues.join(\",\"));}}// Add discount filters\nif(filters.discount_amount?.active&&filters.discount_amount.values?.length>0){const discountRanges=[];const discountMinValues=[];filters.discount_amount.values.forEach(range=>{if(range.max===null){// This is an \"Over\" type discount\ndiscountMinValues.push(range.min);}else{// This is a regular range\ndiscountRanges.push(`${range.min}-${range.max}`);}});if(discountRanges.length>0){url.searchParams.set(\"discount_amount\",discountRanges.join(\",\"));}if(discountMinValues.length>0){url.searchParams.set(\"discount_amount_min\",discountMinValues.join(\",\"));}}if(filters.discount_percent?.active&&filters.discount_percent.values?.length>0){const discountPercentRanges=[];const discountPercentMinValues=[];filters.discount_percent.values.forEach(range=>{if(range.max===null){// This is an \"Over\" type discount\ndiscountPercentMinValues.push(range.min);}else{// This is a regular range\ndiscountPercentRanges.push(`${range.min}-${range.max}`);}});if(discountPercentRanges.length>0){url.searchParams.set(\"discount_percent\",discountPercentRanges.join(\",\"));}if(discountPercentMinValues.length>0){url.searchParams.set(\"discount_percent_min\",discountPercentMinValues.join(\",\"));}}[\"on_sale\",\"in_stock\",\"bundle\",\"subscription\"].forEach(filterType=>{if(filters[filterType]?.active){url.searchParams.set(filterType,\"true\");}});};\nexport const __FramerMetadata__ = {\"exports\":{\"getFilterValue\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"FilterValue\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"updateUrlWithFilters\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"parseUrlFilters\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"convertFilterName\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./filterMappings.map", "/*\n * Framer Commerce\n * Confidential and Proprietary - All Rights Reserved\n * Unauthorized use, reproduction, distribution, or disclosure of this\n * source code or any related information is strictly prohibited.\n *\n * This software is the exclusive property of Framer Commerce (\"Company\").\n * It is considered highly confidential and proprietary information.\n *\n * Any use, copying, modification, distribution, or sharing of this software,\n * in whole or in part, without the express written permission of the Company\n * is strictly prohibited and may result in legal action.\n *\n * DISCLAIMER: This software does not provide any express or\n * implied warranties, including, but not limited to, the implied warranties\n * of merchantability and fitness for a particular purpose. In no event shall\n * Framer Commerce be liable for any direct, indirect, incidental, special,\n * exemplary, or consequential damages (including, but not limited to, procurement\n * of substitute goods or services; loss of use, data, or profits; or business\n * interruption) however caused and on any theory of liability, whether in\n * contract, strict liability, or tort (including negligence or otherwise)\n * arising in any way out of the use of this software, even if advised of\n * the possibility of such damage.\n *\n * Any unauthorized possession, use, copying, distribution, or dissemination\n * of this software will be considered a breach of confidentiality and may\n * result in legal action.\n *\n * For inquiries, contact:\n * Framer Commerce\n * Email: hello@framercommerce.com\n *\n * \u00A9 2025 Butter Supply Inc. All Rights Reserved.\n */import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{parseUrlFilters,updateUrlWithFilters,convertFilterName}from\"https://framerusercontent.com/modules/A55TPw8oJtDToWtsjcDZ/efvR3aKErSMemVA7DBdP/filterMappings.js\";// Constants for localStorage and debugging\nconst FILTER_STATE_KEY=\"shopx_filter_states\";const DEBUG_MODE=true// Enable detailed logging\n;// Global state management to prevent duplicate instances\nconst globalFilterState={instances:new Set,eventListeners:new Map,cleanup:()=>{globalFilterState.instances.clear();globalFilterState.eventListeners.forEach((listener,event)=>{window.removeEventListener(event,listener);});globalFilterState.eventListeners.clear();}};// Ensure cleanup on page unload\nif(typeof window!==\"undefined\"){window.addEventListener(\"beforeunload\",globalFilterState.cleanup);}// Helper function for consistent logging\nconst logDebug=(component,action,data)=>{if(DEBUG_MODE){// console.log(`\uD83D\uDD0D [${component}] ${action}:`, data)\n}};const normalizeProperty=(property,discountType)=>{const propertyMap={collection:\"collection\",product_type:\"product_type\",product_tag:\"product_tag\",price:\"price\",on_sale:\"on_sale\",in_stock:\"in_stock\",bundle:\"bundle\",subscription:\"subscription\",variant:\"variant\",discount:discountType===\"Percent\"?\"discount_percent\":\"discount_amount\"};return propertyMap[property]||property;};/**\n * @framerDisableUnlink\n */export default function FC_CatalogFilterButton(props){const{// Functional props\nfilterType=\"shopify\",property=\"price\",displayText=\"\",value=\"\",priceType=\"Under\",priceThreshold=100,priceOver=50,priceLow=50,priceHigh=100,discountType=\"Percent\",discountValueType=\"Over\",discountThreshold=100,discountLow=50,discountHigh=100,variantTitle=\"Size\",variantValue=\"Large\",showVariantTitle=true,showVariantValue=true,variantStockFilter=\"all\",variantDisplayText=\"\",showText=true,// CMS props\ncmsTitle=\"Category\",cmsValue=\"fashion\",// Font control\nfont={fontSize:16,fontWeight:400,fontFamily:\"Inter\",fontStyle:\"normal\",lineHeight:1.2,letterSpacing:0,textAlign:\"left\",textDecoration:\"none\"},// Style controls\nstyle:{type=\"checkbox\",width=20,height=20,radius=4,radiusPerSide=false,radiusTopLeft=4,radiusTopRight=4,radiusBottomRight=4,radiusBottomLeft=4,swatchType=\"color\",swatchImage=\"\",swatchColor=\"#000000\",swatchBorder=4,icon:{type:iconType=\"default\",color:iconColor=\"#000000\",weight:iconWeight=2,edge:iconEdge=\"round\",size:iconSize=12,customIcon=\"\"}={},gap=8,padding=8,paddingPerSide=false,paddingTop=8,paddingRight=8,paddingBottom=8,paddingLeft=8,direction=\"horizontal\"}={},// State controls\ndefault:defaultState={textColor:\"#000000\",border:{color:\"#000000\",width:{top:2,right:2,bottom:2,left:2},style:\"solid\"},background:\"transparent\"},hover:hoverState={textColor:\"#333333\",border:{color:\"#333333\",width:{top:2,right:2,bottom:2,left:2},style:\"solid\"},background:\"rgba(0,0,0,0.05)\"},selected:selectedState={textColor:\"#000000\",border:{color:\"#000000\",width:{top:2,right:2,bottom:2,left:2},style:\"solid\"},background:\"#000000\"}}=props;// Component instance tracking with global registry\nconst componentId=React.useRef(`filter-${Date.now()}-${Math.random().toString(36).substr(2,9)}`).current;const componentRef=React.useRef(null);const mountedRef=React.useRef(true);const[isHovered,setIsHovered]=React.useState(false);const[isChecked,setIsChecked]=React.useState(false);const isCheckedRef=React.useRef(false);// Generate a normalized property name for URL parameters\nconst normalizedProperty=React.useMemo(()=>{// Convert legacy Shopify property names to the format used in URL parameters\nif(filterType===\"cms\"){return\"cms\"// CMS filters are handled differently\n;}const mapping={\"product-type\":\"product_type\",\"product-tag\":\"product_tag\",\"on-sale\":\"on_sale\",\"in-stock\":\"in_stock\",bundles:\"bundle\",subscriptions:\"subscription\",variant:\"variant\",price:\"price\",discount:discountType===\"Percent\"?\"discount_percent\":\"discount_amount\"};return mapping[property]||property;},[property,filterType,discountType]);// Helper function to consistently get filter value - rewritten to use utility\nconst getFilterValueForComponent=React.useCallback(()=>{try{if(filterType===\"cms\"){return{title:cmsTitle,value:cmsValue,type:\"cms\"};}// Convert property names to normalized format\nconst normalizedProp=normalizedProperty;// For variants, construct a variant filter object\nif(property===\"variant\"){return{name:variantTitle,value:variantValue};}// Handle specific price filters\nif(property===\"price\"){const values=[];if(priceType===\"Under\"){values.push({priceType,min:null,max:priceThreshold});}if(priceType===\"Over\"){values.push({priceType,min:priceOver,max:null});}if(priceType===\"Range\"){values.push({priceType,min:priceLow,max:priceHigh});}//console.log(\"values for ranges, priceType\", values, priceType)\nreturn{values};}// Handle discount filters\nif(property===\"discount\"){const discountProperty=discountType===\"Percent\"?\"discount_percent\":\"discount_amount\";// Create values array with the current range\nconst values=[{min:discountValueType===\"Over\"?discountThreshold:discountLow,max:discountValueType===\"Over\"?null:discountHigh}];return{type:discountProperty,values:values};}// For boolean filters\nif([\"on-sale\",\"in-stock\",\"bundles\",\"subscriptions\"].includes(property)){return true;}// For collection, product-type, product-tag, return the value\nreturn value;}catch(error){console.error(\"Error getting filter value:\",error);return\"\";}},[filterType,property,value,priceType,priceThreshold,priceLow,priceHigh,discountType,discountValueType,discountThreshold,discountLow,discountHigh,variantTitle,variantValue,cmsTitle,cmsValue,normalizedProperty]);// Helper function to check if this filter is active in URL\nconst checkUrlState=React.useCallback(()=>{try{if(typeof window===\"undefined\")return false;const url=new URL(window.location.href);const filterValue=getFilterValueForComponent();logDebug(\"FilterCheckbox\",\"Checking URL state\",{filterType,property,normalizedProperty,filterValue,url:url.toString()});if(filterType===\"cms\"){// For CMS filtering, check for cms-filter parameter\ntry{const cmsFilters=JSON.parse(url.searchParams.get(\"cms-filter\")||\"[]\");return cmsFilters.some(f=>f.title===cmsTitle&&f.value===cmsValue);}catch(e){console.error(\"Error parsing CMS filters from URL:\",e);return false;}}// Use the parsed URL filters from the utility function\nconst parsedFilters=parseUrlFilters(url.searchParams);// console.log(\"parsedFilters\", parsedFilters)\n// Check if this filter is active based on property type\nswitch(property){case\"collection\":case\"product-type\":case\"product-tag\":{const normalized=convertFilterName(property);return parsedFilters[normalized]?.active&&parsedFilters[normalized].values.includes(filterValue);}case\"variant\":{if(!parsedFilters.variant?.active)return false;// Check if our specific variant option/value combo is active\nreturn parsedFilters.variant.values.some(v=>v.name===variantTitle&&v.value===variantValue);}case\"price\":{if(!parsedFilters.price?.active)return false;// console.log(\"parsedFilters.price\", parsedFilters.price)\n// console.log(\"filterValue\", filterValue)\nconst range=filterValue.values[0];if(range.priceType===\"Under\"){// For \"Under\" type, check price_max parameter\nconst maxValues=url.searchParams.get(\"price_max\")?.split(\",\").map(Number)||[];return maxValues.includes(range.max);}else if(range.priceType===\"Over\"){// For \"Over\" type, check price_min parameter\nconst minValues=url.searchParams.get(\"price_min\")?.split(\",\").map(Number)||[];return minValues.includes(range.min);}else{// For regular ranges, check price parameter\nconst urlRanges=url.searchParams.get(\"price\")?.split(\",\").filter(Boolean)||[];const currentRange=`${range.min}-${range.max}`;return urlRanges.includes(currentRange);}}case\"discount\":{// Determine discount type (percent vs amount)\nconst discountProperty=discountType===\"Percent\"?\"discount_percent\":\"discount_amount\";if(!parsedFilters[discountProperty]?.active)return false;// Get the current range we're checking for\nconst currentRange={min:discountValueType===\"Over\"?discountThreshold:discountLow,max:discountValueType===\"Over\"?null:discountHigh};// Check if this range exists in the values array\nif(parsedFilters[discountProperty].values){return parsedFilters[discountProperty].values.some(range=>range.min===currentRange.min&&range.max===currentRange.max);}// Check min values if it's an \"Over\" type\nif(discountValueType===\"Over\"&&parsedFilters[discountProperty].min){return parsedFilters[discountProperty].min.includes(discountThreshold);}return false;}case\"on-sale\":case\"in-stock\":case\"bundles\":case\"subscriptions\":{const normalized=convertFilterName(property);return parsedFilters[normalized]?.active;}default:return false;}}catch(error){console.error(\"Error checking URL state:\",error);return false;}},[filterType,property,normalizedProperty,getFilterValueForComponent,variantTitle,variantValue,cmsTitle,cmsValue,priceType,priceThreshold,priceLow,priceHigh,discountType,discountValueType,discountThreshold,discountLow,discountHigh]);// Dispatch filter change event\nconst dispatchFilterChange=React.useCallback(active=>{try{logDebug(\"FilterCheckbox\",\"Dispatching filter change\",{componentId,property,normalizedProperty,active});const filterValue=getFilterValueForComponent();const url=new URL(window.location.href);// Get existing parsed filters\nconst filters=parseUrlFilters(url.searchParams);// Update URL parameters based on filter type and state\nif(filterType===\"cms\"){// For CMS filtering, use a JSON array stored in cms-filter param\ntry{const cmsFilters=JSON.parse(url.searchParams.get(\"cms-filter\")||\"[]\");if(active){// Only add if not already present\nif(!cmsFilters.some(f=>f.title===cmsTitle&&f.value===cmsValue)){cmsFilters.push({title:cmsTitle,value:cmsValue,type:\"cms\"});url.searchParams.set(\"cms-filter\",JSON.stringify(cmsFilters));logDebug(\"FilterCheckbox\",\"Added CMS filter to URL\",{title:cmsTitle,value:cmsValue,filterCount:cmsFilters.length});}}else{// Remove this CMS filter from the array\nconst filteredCmsFilters=cmsFilters.filter(f=>!(f.title===cmsTitle&&f.value===cmsValue));if(filteredCmsFilters.length>0){url.searchParams.set(\"cms-filter\",JSON.stringify(filteredCmsFilters));}else{url.searchParams.delete(\"cms-filter\");}logDebug(\"FilterCheckbox\",\"Removed CMS filter from URL\",{title:cmsTitle,value:cmsValue,remainingFilters:filteredCmsFilters.length});}}catch(e){console.error(\"Error updating CMS filters in URL:\",e);}}else{// Update filters based on property type\nswitch(property){case\"collection\":case\"product-type\":case\"product-tag\":{const normalized=convertFilterName(property);if(active){// Add value to filter\nif(!filters[normalized]){filters[normalized]={active:true,values:[]};}if(!filters[normalized].values.includes(filterValue)){filters[normalized].values.push(filterValue);}filters[normalized].active=true;}else{// Remove value from filter\nif(filters[normalized]&&filters[normalized].values){filters[normalized].values=filters[normalized].values.filter(v=>v!==filterValue);filters[normalized].active=filters[normalized].values.length>0;}}break;}case\"variant\":{if(active){// Initialize variant filter if needed\nif(!filters.variant){// filters.variant = { active: true, values: [] };\nfilters.variant={active:true,values:[]};}// Add variant if not already present\nconst existing=filters.variant.values.some(v=>v.name===variantTitle&&v.value===variantValue);if(!existing){filters.variant.values.push({name:variantTitle,value:variantValue});}// Ensure active state is correctly set\nfilters.variant.active=filters.variant.values.length>0;// Check if there are existing values in the URL for this variant\nconst urlKey=`variant_${variantTitle}`;if(url.searchParams.has(urlKey)){const existingValuesStr=url.searchParams.get(urlKey);if(existingValuesStr){// First decode the value to properly handle URL encoding\nconst decodedValues=decodeURIComponent(existingValuesStr);const existingValues=decodedValues.split(\",\").filter(Boolean);// Check if the value already exists (case-insensitive)\nconst valueExists=existingValues.some(v=>v.toLowerCase()===variantValue.toLowerCase());if(!valueExists){// Add this value to the existing comma-separated list\nexistingValues.push(variantValue);// Update the URL parameter with the combined list - don't encode, as URLSearchParams does that\nurl.searchParams.set(urlKey,existingValues.join(\",\"));// console.log(\n//     `\uD83D\uDD0E [FilterCheckbox] Updated variant parameter ${urlKey}:`,\n//     {\n//         rawValue:\n//             existingValues.join(\n//                 \",\"\n//             ),\n//         existingValues,\n//     }\n// )\n}}}else{// Set the single value\nurl.searchParams.set(urlKey,variantValue);}}else{// Remove variant if present\nif(filters.variant&&filters.variant.values){filters.variant.values=filters.variant.values.filter(v=>!(v.name===variantTitle&&v.value===variantValue));// console.log(\n//     \"filters.variant.values\",\n//     filters.variant.values\n// )\nif(filters.variant.values.length>0){filters.variant.active=true;}// Update URL parameter\nconst urlKey=`variant_${variantTitle}`;if(url.searchParams.has(urlKey)){const existingValuesStr=url.searchParams.get(urlKey);if(existingValuesStr){const existingValues=existingValuesStr.split(\",\").filter(Boolean);const updatedValues=existingValues.filter(v=>v!==variantValue);// console.log(\n//     \"updatedValues\",\n//     updatedValues\n// )\nif(updatedValues.length>0){url.searchParams.set(urlKey,updatedValues.join(\",\"));// console.log(\n//     `\uD83D\uDD0E [FilterCheckbox] Updated variant parameter ${urlKey}:`,\n//     updatedValues.join(\",\")\n// )\n}else{url.searchParams.delete(urlKey);// console.log(\n//     `\uD83D\uDD0E [FilterCheckbox] Removed empty variant parameter ${urlKey}`\n// )\n}}}}}break;}case\"price\":{const range=filterValue.values[0];// console.log(\"range\", range)\n// Check if the filter is for \"Under\" or regular range\nif(range.priceType===\"Under\"){// Handle \"Under\" price ranges\nconst maxValues=url.searchParams.get(\"price_max\")?.split(\",\").map(Number)||[];if(active){if(!maxValues.includes(range.max)){maxValues.push(range.max);}}else{const index=maxValues.indexOf(range.max);if(index>-1){maxValues.splice(index,1);}}if(maxValues.length>0){url.searchParams.set(\"price_max\",maxValues.join(\",\"));}else{url.searchParams.delete(\"price_max\");}}else if(range.priceType===\"Over\"){// Handle \"Over\" price ranges\nconst minValues=url.searchParams.get(\"price_min\")?.split(\",\").map(Number)||[];if(active){if(!minValues.includes(range.min)){minValues.push(range.min);}}else{const index=minValues.indexOf(range.min);if(index>-1){minValues.splice(index,1);}}if(minValues.length>0){url.searchParams.set(\"price_min\",minValues.join(\",\"));}else{url.searchParams.delete(\"price_min\");}}else{// Handle regular price ranges\nconst ranges=url.searchParams.get(\"price\")?.split(\",\").filter(Boolean)||[];const currentRange=`${range.min}-${range.max}`;if(active){if(!ranges.includes(currentRange)){ranges.push(currentRange);}}else{const index=ranges.indexOf(currentRange);if(index>-1){ranges.splice(index,1);}}if(ranges.length>0){url.searchParams.set(\"price\",ranges.join(\",\"));}else{url.searchParams.delete(\"price\");}}// Set price filter values with multiple ranges\nfilters.price={active:false,values:[]};// Add regular ranges\nconst regularRanges=url.searchParams.get(\"price\")?.split(\",\").filter(Boolean)||[];if(regularRanges.length>0){filters.price.values.push(...regularRanges.map(range=>{const[min,max]=range.split(\"-\").map(Number);return{min:isNaN(min)?null:min,max:isNaN(max)?null:max,priceType:\"Range\"};}));}// Add \"Under\" ranges\nconst underMaxValues=url.searchParams.get(\"price_max\")?.split(\",\").map(Number)||[];if(underMaxValues.length>0){filters.price.values.push(...underMaxValues.map(max=>({min:null,max,priceType:\"Under\"})));}const minValues=url.searchParams.get(\"price_min\")?.split(\",\").map(Number)||[];if(minValues.length>0){filters.price.values.push(...minValues.map(min=>({min,max:null,priceType:\"Over\"})));}// Update active state based on whether we have any ranges\nfilters.price.active=filters.price.values.length>0;break;}case\"discount\":{// Determine discount type (percent vs amount)\nconst discountProperty=discountType===\"Percent\"?\"discount_percent\":\"discount_amount\";if(active){// Add the new range to the existing values\nconst newRange={min:discountValueType===\"Over\"?discountThreshold:discountLow,max:discountValueType===\"Over\"?null:discountHigh};if(!filters[discountProperty]){filters[discountProperty]={active:true,values:[]};}filters[discountProperty].values.push(newRange);filters[discountProperty].active=true// Ensure active state is set\n;}else{// Logic to remove the range if it exists\nif(filters[discountProperty]){const rangeToRemove={min:discountValueType===\"Over\"?discountThreshold:discountLow,max:discountValueType===\"Over\"?null:discountHigh};filters[discountProperty].values=filters[discountProperty].values.filter(range=>!(range.min===rangeToRemove.min&&range.max===rangeToRemove.max));filters[discountProperty].active=filters[discountProperty].values.length>0;}}break;}case\"on-sale\":case\"in-stock\":case\"bundles\":case\"subscriptions\":{const normalized=convertFilterName(property);if(active){filters[normalized]={active:true,value:true};}else{filters[normalized]={active:false,value:true};}break;}}// console.log(\n//     \"Updating url with price range filters\",\n//     filters,\n//     url\n// )\n// Update URL with all current filters\nupdateUrlWithFilters(filters,url);// Add logging to track filter state and URL updates\n// console.log(\"\uD83D\uDD04 [FilterCheckbox] Current filters:\", filters)\n// console.log(\n//     \"\uD83D\uDD04 [FilterCheckbox] Current URL:\",\n//     url.toString()\n// )\n}// Update URL without reloading the page\nwindow.history.pushState({},\"\",url.toString());// Determine the event type to dispatch based on filter property\nconst eventType=filterType===\"cms\"?\"cms\":normalizedProperty;// Dispatch the filter-navigation event so other components are notified\nconst navigationEvent=new CustomEvent(\"filter-navigation\",{detail:{filters,sourceComponentId:componentId}});document.dispatchEvent(navigationEvent);// Create event type that matches what GlobalCMS expects\n// For variants, we need to use variant_OPTIONNAME format\nlet dispatchEventType=eventType;let dispatchValue=filterValue;if(property===\"variant\"){dispatchEventType=`variant_${variantTitle}`;if(!active){dispatchValue=variantValue;}else{// For variants, use the current URL parameter value which has all selected options\nconst urlKey=`variant_${variantTitle}`;if(url.searchParams.has(urlKey)){const urlValue=url.searchParams.get(urlKey);if(urlValue){// Decode the URL parameter to handle URL encoding\nconst decodedValue=decodeURIComponent(urlValue);// console.log(\n//     `\uD83D\uDD0E [FilterCheckbox] Using URL value for dispatch:`,\n//     {\n//         urlKey,\n//         urlValue,\n//         decodedValue,\n//     }\n// )\ndispatchValue=decodedValue// Use the decoded value\n;}else{dispatchValue=variantValue;}}else{dispatchValue=variantValue;}}}// Dispatch the legacy filter change event for compatibility with GlobalCMS\nconst legacyEvent=new CustomEvent(\"product-filter-change\",{detail:{type:dispatchEventType,group:property===\"variant\"?variantTitle:undefined,active,value:dispatchValue,componentId:componentId,filterType:filterType,variantStockFilter:property===\"variant\"?variantStockFilter:undefined}});document.dispatchEvent(legacyEvent);// console.log(\n//     \"\uD83D\uDD0E [FilterCheckbox] Filter change event dispatched\",\n//     {\n//         eventType: dispatchEventType,\n//         property,\n//         active,\n//         value: dispatchValue,\n//         filters,\n//     }\n// )\nlogDebug(\"FilterCheckbox\",\"Filter change events dispatched\",{componentId,property,active,url:url.toString()});}catch(error){console.error(\"Error dispatching filter change:\",error);}},[componentId,property,normalizedProperty,variantTitle,variantValue,getFilterValueForComponent,filterType,cmsTitle,cmsValue,priceType,priceThreshold,priceLow,priceHigh,discountType,discountValueType,discountThreshold,discountLow,discountHigh,variantStockFilter]);// Listen for URL changes\nReact.useEffect(()=>{if(!mountedRef.current)return;const handleUrlChange=event=>{// console.log(\"handleUrlChange\", event)\nconst isBackButton=event?.type===\"popstate\";const isFilterChanged=event?.type===\"filter-navigation\";const eventSource=event?.detail?.sourceComponentId||\"none\";const currentUrl=window.location.href;// console.log(\"\uD83D\uDD19 [Navigation] Event detected:\", {\n//     type: event?.type,\n//     isBackButton,\n//     isFilterChanged,\n//     url: currentUrl,\n//     source: eventSource,\n// })\n// Get the current state from URL and compare with current state\nconst newState=checkUrlState();const currentState=isCheckedRef.current;// console.log(\"\uD83D\uDD19 [Navigation] State comparison:\", {\n//     currentState,\n//     newState,\n//     stateChanged: newState !== currentState,\n//     componentId,\n// })\n// Always update on back button\nif(newState!==currentState){// console.log(\"\uD83D\uDD19 [Navigation] Updating state:\", {\n//     from: currentState,\n//     to: newState,\n//     reason: isBackButton ? \"back_button\" : \"state_change\",\n//     componentId,\n// })\nsetIsChecked(newState);isCheckedRef.current=newState;}};// Separate handler specifically for popstate\nconst handlePopState=event=>{// console.log(\"handlePopState\", event)\n// console.log(\"\uD83D\uDD19 [Back Button] PopState event detected\")\nconst isBackButton=event?.type===\"popstate\";if(isBackButton){// console.log(\"Reloading on back button\")\nconst newState=checkUrlState();setIsChecked(newState);isCheckedRef.current=newState;// console.log(\"\uD83D\uDCE6 setIsChecked triggered with:\", newState)\nwindow.location.reload();}};//console.log('\uD83D\uDD19 [Navigation] Setting up event handlers for component:', componentId);\n// Initial URL check\nhandleUrlChange({});// Add event listeners\n//window.addEventListener('popstate', handlePopState);\nwindow.addEventListener(\"popstate\",handlePopState);document.addEventListener(\"filter-navigation\",handleUrlChange);return()=>{if(!mountedRef.current)return;// console.log(\n//     \"\uD83D\uDD19 [Navigation] Cleaning up event handlers for component:\",\n//     componentId\n// )\n//window.removeEventListener('popstate', handleUrlChange);\n//window.removeEventListener('popstate', handlePopState);\ndocument.removeEventListener(\"filter-navigation\",handleUrlChange);};},[componentId,checkUrlState]);// Handle filter change\nconst handleChange=React.useCallback(()=>{try{const newState=!isCheckedRef.current;logDebug(\"FilterCheckbox\",\"Filter clicked\",{componentId,property,currentState:isCheckedRef.current,newState});// Update internal state first to prevent flicker\nsetIsChecked(newState);isCheckedRef.current=newState;// Then dispatch event to update URL and notify other components\ndispatchFilterChange(newState);}catch(error){console.error(\"Error handling filter change:\",error);}},[dispatchFilterChange,componentId,property]);// Register instance\nReact.useEffect(()=>{if(!componentRef.current)return;try{// Register this instance\nglobalFilterState.instances.add(componentId);componentRef.current.setAttribute(\"data-filter-id\",componentId);logDebug(\"FilterCheckbox\",\"Component registered\",{componentId,property,filterType});// Cleanup on unmount\nreturn()=>{mountedRef.current=false;globalFilterState.instances.delete(componentId);logDebug(\"FilterCheckbox\",\"Component unregistered\",{componentId});if(globalFilterState.instances.size===0){globalFilterState.cleanup();}};}catch(error){console.error(\"Error registering filter component:\",error);}},[componentId,property,filterType]);// Initialize with shopXtools data and event listeners\nReact.useEffect(()=>{if(!mountedRef.current)return;try{// Initialize from URL parameters if they exist\nlogDebug(\"FilterCheckbox\",\"Initializing component from URL\",{componentId,url:typeof window!==\"undefined\"?window.location.href:null});// Handle filter reset events\nconst handleFilterReset=e=>{logDebug(\"FilterCheckbox\",\"Filter reset event received\",{componentId});setIsChecked(false);isCheckedRef.current=false;};// Handle filter change events\nconst handleFilterChange=e=>{// Skip events from this component\nif(e.detail.componentId===componentId)return;// Handle CMS vs regular filters\nif(filterType===\"cms\"&&e.detail.type===\"cms\"){// Check if this specific CMS filter was toggled\nif(e.detail.value?.title===cmsTitle&&e.detail.value?.value===cmsValue){logDebug(\"FilterCheckbox\",\"CMS filter change received\",{componentId,title:cmsTitle,value:cmsValue,active:e.detail.active});setIsChecked(e.detail.active);isCheckedRef.current=e.detail.active;}}else if(filterType===\"shopify\"){// Check if this specific property was toggled\nconst filterProperty=convertFilterName(property);const eventProperty=convertFilterName(e.detail.type);if(filterProperty===eventProperty){// For regular properties like on_sale, in_stock, etc.\nif(![\"variant\",\"price\",\"discount_amount\",\"discount_percent\"].includes(filterProperty)){// For value-based filters, check if values match\nif([\"collection\",\"product_type\",\"product_tag\"].includes(filterProperty)){if(e.detail.value===value){logDebug(\"FilterCheckbox\",\"Filter change for value received\",{componentId,property:filterProperty,value,active:e.detail.active});setIsChecked(e.detail.active);isCheckedRef.current=e.detail.active;}}else{logDebug(\"FilterCheckbox\",\"Boolean filter change received\",{componentId,property:filterProperty,active:e.detail.active});setIsChecked(e.detail.active);isCheckedRef.current=e.detail.active;}}else if(filterProperty===\"variant\"&&e.detail.group===variantTitle&&e.detail.value?.optionValue===variantValue){logDebug(\"FilterCheckbox\",\"Variant filter change received\",{componentId,variantTitle,variantValue,active:e.detail.active});setIsChecked(e.detail.active);isCheckedRef.current=e.detail.active;}else if([\"price\",\"discount_amount\",\"discount_percent\"].includes(filterProperty)){// Compare values to see if this specific filter was toggled\nconst myFilterValue=getFilterValueForComponent();// Skip if we can't properly compare\nif(!myFilterValue||!e.detail.value)return;const valuesMatch=JSON.stringify(myFilterValue)===JSON.stringify(e.detail.value);if(valuesMatch){logDebug(\"FilterCheckbox\",\"Price/discount filter change received\",{componentId,property:filterProperty,value:myFilterValue,active:e.detail.active});setIsChecked(e.detail.active);isCheckedRef.current=e.detail.active;}}}}};// Register event listeners\nconst events=[{name:\"filter-reset\",handler:handleFilterReset},{name:\"product-filter-change\",handler:handleFilterChange}];// Add all event listeners\nevents.forEach(({name,handler})=>{document.addEventListener(name,handler);logDebug(\"FilterCheckbox\",`Added event listener: ${name}`,{componentId});});// Cleanup\nreturn()=>{if(!mountedRef.current)return;events.forEach(({name,handler})=>{document.removeEventListener(name,handler);});logDebug(\"FilterCheckbox\",\"Removed event listeners\",{componentId});};}catch(error){console.error(\"Error initializing filter:\",error);}},[componentId,property,getFilterValueForComponent,variantTitle,variantValue,cmsTitle,cmsValue,filterType,normalizedProperty,value]);// Keyboard handler for accessibility\nconst handleKeyDown=React.useCallback(event=>{if(event.key===\"Enter\"||event.key===\" \"){event.preventDefault();handleChange();}},[handleChange]);// Text display logic - generate human-readable text\nconst getDisplayText=React.useCallback(()=>{try{if(filterType===\"cms\"){return displayText||`${cmsTitle}: ${cmsValue}`;}switch(property){case\"variant\":return variantDisplayText||variantValue;case\"price\":if(priceType===\"Under\"){return`Under $${priceThreshold}`;}return`$${priceLow} - $${priceHigh}`;case\"discount\":const unit=discountType===\"Percent\"?\"%\":\"$\";if(discountValueType===\"Over\"){return`Over ${discountThreshold}${unit} Off`;}return`${discountLow}${unit} - ${discountHigh}${unit} Off`;case\"on-sale\":return displayText||\"On Sale\";case\"in-stock\":return displayText||\"In Stock\";case\"subscriptions\":return displayText||\"Subscriptions\";default:return displayText||value||\"\";}}catch(error){console.error(\"Error generating display text:\",error);return displayText||value||\"\";}},[filterType,cmsTitle,cmsValue,property,displayText,value,variantValue,variantDisplayText,priceType,priceThreshold,priceLow,priceHigh,discountType,discountValueType,discountThreshold,discountLow,discountHigh]);// Style objects with memoization\nconst getRadiusStyle=React.useCallback(()=>{try{if(radiusPerSide){return`${radiusTopLeft}px ${radiusTopRight}px ${radiusBottomRight}px ${radiusBottomLeft}px`;}return`${radius}px`;}catch(error){console.error(\"Error generating radius style:\",error);return`${radius}px`;}},[radius,radiusPerSide,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft]);// Helper function to generate border style\nconst getBorderStyle=borderConfig=>{if(borderConfig.isMixed){return{borderTop:`${borderConfig.top}px ${borderConfig.style} ${borderConfig.color}`,borderRight:`${borderConfig.right}px ${borderConfig.style} ${borderConfig.color}`,borderBottom:`${borderConfig.bottom}px ${borderConfig.style} ${borderConfig.color}`,borderLeft:`${borderConfig.left}px ${borderConfig.style} ${borderConfig.color}`};}return{border:`${borderConfig.width}px ${borderConfig.style} ${borderConfig.color}`};};// Helper function to generate hover border style\nconst getHoverBorderStyle=borderConfig=>{if(borderConfig.isMixed){return{borderTop:`${borderConfig.top}px ${borderConfig.style} ${borderConfig.color}`,borderRight:`${borderConfig.right}px ${borderConfig.style} ${borderConfig.color}`,borderBottom:`${borderConfig.bottom}px ${borderConfig.style} ${borderConfig.color}`,borderLeft:`${borderConfig.left}px ${borderConfig.style} ${borderConfig.color}`};}return{border:`${borderConfig.width}px ${borderConfig.style} ${borderConfig.color}`};};// Helper function to generate selected border style\nconst getSelectedBorderStyle=borderConfig=>{if(borderConfig.isMixed){return{borderTop:`${borderConfig.top}px ${borderConfig.style} ${borderConfig.color}`,borderRight:`${borderConfig.right}px ${borderConfig.style} ${borderConfig.color}`,borderBottom:`${borderConfig.bottom}px ${borderConfig.style} ${borderConfig.color}`,borderLeft:`${borderConfig.left}px ${borderConfig.style} ${borderConfig.color}`};}return{border:`${borderConfig.width}px ${borderConfig.style} ${borderConfig.color}`};};const containerStyle=React.useMemo(()=>{try{const state=isChecked?selectedState:isHovered?hoverState:defaultState;return{display:\"flex\",flexDirection:props.style?.stacked===\"vertical\"?\"column\":\"row\",alignItems:\"center\",justifyContent:\"center\",width:\"100%\",height:\"100%\",position:\"relative\",boxSizing:\"border-box\",padding:paddingPerSide?`${paddingTop}px ${paddingRight}px ${paddingBottom}px ${paddingLeft}px`:`${padding}px`,...props.style?.type===\"button\"&&{...isChecked?getSelectedBorderStyle(selectedState.border):isHovered?getHoverBorderStyle(hoverState.border):getBorderStyle(defaultState.border),background:state.background,borderRadius:getRadiusStyle()},transition:\"all 0.2s ease-in-out\",cursor:\"pointer\",overflow:\"hidden\",flexShrink:0,flexGrow:0};}catch(error){console.error(\"Error generating container style:\",error);return{display:\"flex\",width:\"100%\",height:\"100%\",position:\"relative\",boxSizing:\"border-box\"};}},[props.style?.type,props.style?.stacked,padding,paddingPerSide,paddingTop,paddingRight,paddingBottom,paddingLeft,getRadiusStyle,isHovered,isChecked,defaultState,hoverState,selectedState]);const textStyle=React.useMemo(()=>({margin:0,padding:0,...font,color:isChecked?selectedState.textColor:isHovered?hoverState.textColor:defaultState.textColor,display:\"block\",width:\"100%\",userSelect:\"none\",marginLeft:props.style?.type!==\"button\"&&props.style?.stacked!==\"vertical\"?gap:0,marginTop:props.style?.type!==\"button\"&&props.style?.stacked===\"vertical\"?gap:0,textAlign:font.textAlign||\"left\",transition:\"color 0.2s ease-in-out\",justifyContent:font.textAlign===\"center\"?\"center\":font.textAlign===\"right\"?\"flex-end\":\"flex-start\",alignItems:\"center\"}),[font,defaultState.textColor,hoverState.textColor,selectedState.textColor,isChecked,isHovered,props.style?.type,props.style?.stacked,gap]);const checkboxStyle=React.useMemo(()=>{try{const state=isChecked?selectedState:isHovered?hoverState:defaultState;return{width:width,height:height,transition:\"all 0.2s ease-in-out\",cursor:\"pointer\",display:props.style?.type===\"checkbox\"?\"flex\":\"none\",alignItems:\"center\",justifyContent:\"center\",borderRadius:getRadiusStyle(),flexShrink:0,...isChecked?getSelectedBorderStyle(selectedState.border):isHovered?getHoverBorderStyle(hoverState.border):getBorderStyle(defaultState.border),background:state.background};}catch(error){console.error(\"Error generating checkbox style:\",error);return{width:width,height:height,display:props.style?.type===\"checkbox\"?\"flex\":\"none\"};}},[width,height,getRadiusStyle,isHovered,isChecked,defaultState,hoverState,selectedState,props.style?.type]);const renderIcon=React.useCallback(()=>{try{const showPreview=props.style?.icon?.preview&&RenderTarget.current()===\"CANVAS\";if(!isChecked&&!showPreview||props.style?.type!==\"checkbox\")return null;if(iconType===\"custom\"&&customIcon){return /*#__PURE__*/_jsx(\"img\",{src:customIcon,width:iconSize,height:iconSize,style:{objectFit:\"contain\"},alt:\"Custom checkbox icon\"});}// Default checkmark with precise stroke width\nconst lineCap=iconEdge===\"round\"?\"round\":\"square\";const lineJoin=iconEdge===\"round\"?\"round\":\"miter\";const strokeWidth=Math.max(1,Math.min(4,iconWeight))// Ensure stroke width is between 1-4px\n;return /*#__PURE__*/_jsx(\"svg\",{width:iconSize,height:iconSize,viewBox:\"0 0 12 12\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",\"aria-hidden\":\"true\",style:{shapeRendering:\"crispEdges\",strokeWidth:`${strokeWidth}px`},children:/*#__PURE__*/_jsx(\"path\",{d:\"M10 3L4.5 8.5L2 6\",stroke:iconColor,strokeWidth:strokeWidth,strokeLinecap:lineCap,strokeLinejoin:lineJoin})});}catch(error){console.error(\"Error rendering icon:\",error);return null;}},[isChecked,props.style?.type,props.style?.icon?.preview,iconType,customIcon,iconSize,iconEdge,iconColor,iconWeight]);const renderSwatch=React.useCallback(()=>{try{const state=isChecked?selectedState:isHovered?hoverState:defaultState;const borderConfig=state.border;const containerRadius=radiusPerSide?`${radiusTopLeft}px ${radiusTopRight}px ${radiusBottomRight}px ${radiusBottomLeft}px`:`${radius}px`;// Handle both single and per-side border widths\nconst borderTop=borderConfig.width.isMixed?borderConfig.width.top:borderConfig.width.defaultValue??1;const borderRight=borderConfig.width.isMixed?borderConfig.width.right:borderConfig.width.defaultValue??1;const borderBottom=borderConfig.width.isMixed?borderConfig.width.bottom:borderConfig.width.defaultValue??1;const borderLeft=borderConfig.width.isMixed?borderConfig.width.left:borderConfig.width.defaultValue??1;// Calculate inner dimensions accounting for border width and space\nconst totalBorderWidth=borderLeft+borderRight;const totalBorderHeight=borderTop+borderBottom;const totalSpace=swatchBorder*2;const innerWidth=Math.max(0,width-totalBorderWidth-totalSpace);const innerHeight=Math.max(0,height-totalBorderHeight-totalSpace);// Calculate inner radius accounting for border width and space\nconst innerRadius=radiusPerSide?`${Math.max(0,radiusTopLeft-swatchBorder-borderTop)}px ${Math.max(0,radiusTopRight-swatchBorder-borderRight)}px ${Math.max(0,radiusBottomRight-swatchBorder-borderBottom)}px ${Math.max(0,radiusBottomLeft-swatchBorder-borderLeft)}px`:`${Math.max(0,radius-swatchBorder-borderTop)}px`// Use borderTop for uniform radius calculation\n;const containerBorderStyle={borderTop:`${borderTop}px ${borderConfig.style} ${borderConfig.color}`,borderRight:`${borderRight}px ${borderConfig.style} ${borderConfig.color}`,borderBottom:`${borderBottom}px ${borderConfig.style} ${borderConfig.color}`,borderLeft:`${borderLeft}px ${borderConfig.style} ${borderConfig.color}`};if(swatchType===\"image\"&&swatchImage){return /*#__PURE__*/_jsx(\"div\",{style:{width:width,height:height,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",borderRadius:containerRadius,...containerBorderStyle,background:state.background,boxSizing:\"border-box\",flexShrink:0,transition:\"all 0.2s ease-in-out\",overflow:\"hidden\",position:\"relative\"},children:/*#__PURE__*/_jsx(\"div\",{style:{width:innerWidth,height:innerHeight,position:\"absolute\",top:\"50%\",left:\"50%\",transform:\"translate(-50%, -50%)\",borderRadius:innerRadius,overflow:\"hidden\"},children:/*#__PURE__*/_jsx(\"img\",{src:swatchImage,alt:`Swatch for ${getDisplayText()}`,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\"}})})});}// Get the color based on type\nlet color=swatchColor;if(swatchType===\"color\"&&props.style?.swatchColorType===\"dynamic\"){// In canvas preview, use the specified color\nif(RenderTarget.current()===\"CANVAS\"){color=\"#8A8A8A\";}else{// In browser, try to get the color from window.__FcCheckoutConfigs\nif(typeof window!==\"undefined\"&&window.__FcCheckoutConfigs?.variantColorValues){try{// For variants, use just the variant value (lowercase) to find the color mapping\nif(property===\"variant\"){const colorName=variantValue.toLowerCase();const colorMapping=window.__FcCheckoutConfigs.variantColorValues.find(c=>c.name.toLowerCase()===colorName);if(colorMapping?.hex){color=colorMapping.hex;}}}catch(error){console.error(\"Error getting dynamic color:\",error);}}}}return /*#__PURE__*/_jsx(\"div\",{style:{width:width,height:height,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",borderRadius:containerRadius,...containerBorderStyle,background:state.background,boxSizing:\"border-box\",flexShrink:0,transition:\"all 0.2s ease-in-out\",overflow:\"hidden\",position:\"relative\"},children:/*#__PURE__*/_jsx(\"div\",{style:{width:innerWidth,height:innerHeight,position:\"absolute\",top:\"50%\",left:\"50%\",transform:\"translate(-50%, -50%)\",backgroundColor:color,borderRadius:innerRadius,minWidth:0,minHeight:0}})});}catch(error){console.error(\"Error rendering swatch:\",error);return null;}},[width,height,swatchType,swatchImage,swatchColor,swatchBorder,radius,radiusPerSide,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,isChecked,isHovered,defaultState,hoverState,selectedState,getDisplayText,props.style?.swatchColorType,property,variantValue]);// Render checkbox and text with improved accessibility\ntry{return /*#__PURE__*/_jsxs(\"div\",{style:containerStyle,ref:componentRef,onClick:handleChange,onKeyDown:handleKeyDown,role:\"checkbox\",\"aria-checked\":isChecked,tabIndex:0,\"data-filter-id\":componentId,\"data-filter-type\":normalizedProperty,\"data-filter-value\":typeof value===\"string\"?value:JSON.stringify(getFilterValueForComponent()),onMouseEnter:()=>setIsHovered(true),onMouseLeave:()=>setIsHovered(false),onTouchStart:()=>setIsHovered(true),onTouchEnd:()=>setIsHovered(false),onTouchCancel:()=>setIsHovered(false),\"aria-label\":`Filter by ${getDisplayText()}`,children:[props.style?.type===\"checkbox\"&&/*#__PURE__*/_jsx(\"div\",{style:checkboxStyle,children:renderIcon()}),props.style?.type===\"swatch\"&&renderSwatch(),showText&&/*#__PURE__*/_jsx(\"p\",{style:textStyle,children:property===\"variant\"?getDisplayText():displayText||getDisplayText()})]});}catch(error){console.error(\"Error rendering filter component:\",error);return /*#__PURE__*/_jsx(\"div\",{style:{padding:\"10px\",color:\"red\"},children:\"Error rendering filter component\"});}}addPropertyControls(FC_CatalogFilterButton,{// Style controls\nstyle:{type:ControlType.Object,title:\"Style\",controls:{type:{type:ControlType.Enum,title:\"Type\",options:[\"checkbox\",\"swatch\",\"button\"],optionTitles:[\"Checkbox\",\"Swatch\",\"Button\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\",defaultValue:\"checkbox\"},width:{type:ControlType.Number,title:\"Width\",defaultValue:24,min:8,max:104,step:8,displayStepper:true,hidden:({type})=>type===\"button\"},height:{type:ControlType.Number,title:\"Height\",defaultValue:24,min:8,max:104,step:8,displayStepper:true,hidden:({type})=>type===\"button\"},radius:{type:ControlType.FusedNumber,title:\"Radius\",defaultValue:4,toggleKey:\"radiusPerSide\",toggleTitles:[\"All\",\"Sides\"],valueKeys:[\"radiusTopLeft\",\"radiusTopRight\",\"radiusBottomRight\",\"radiusBottomLeft\"],valueLabels:[\"TL\",\"TR\",\"BR\",\"BL\"],min:0},swatchType:{type:ControlType.Enum,title:\"Swatch\",options:[\"image\",\"color\"],optionTitles:[\"Image\",\"Color\"],defaultValue:\"color\",displaySegmentedControl:true,hidden:({type})=>type!==\"swatch\"},swatchColorType:{type:ControlType.Enum,title:\"Color\",options:[\"hex\",\"dynamic\"],optionTitles:[\"Hex\",\"Dynamic\"],defaultValue:\"hex\",displaySegmentedControl:true,description:\"Set hex code or use dynamic variant colors set in the plugin.\",hidden:({type,swatchType})=>type!==\"swatch\"||swatchType!==\"color\"},swatchImage:{type:ControlType.Image,title:\"Image\",hidden:({type,swatchType})=>type!==\"swatch\"||swatchType!==\"image\"},swatchColor:{type:ControlType.Color,title:\"Hex\",defaultValue:\"#000000\",hidden:({type,swatchType,swatchColorType})=>type!==\"swatch\"||swatchType!==\"color\"||swatchColorType!==\"hex\"},swatchBorder:{type:ControlType.Number,title:\"Space\",defaultValue:4,min:0,max:20,step:1,description:\"Space around swatch and border\",hidden:({type})=>type!==\"swatch\"},icon:{type:ControlType.Object,title:\"Icon\",hidden:({type})=>type!==\"checkbox\",controls:{preview:{type:ControlType.Boolean,title:\"Preview\",defaultValue:false},type:{type:ControlType.Enum,title:\"Icon\",options:[\"default\",\"custom\"],optionTitles:[\"Default\",\"Custom\"],defaultValue:\"default\",displaySegmentedControl:true},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\",hidden:({type})=>type!==\"default\"},weight:{type:ControlType.Number,title:\"Weight\",defaultValue:2,min:.5,max:4,step:.5,hidden:({type})=>type!==\"default\"},edge:{type:ControlType.Enum,title:\"Edge\",options:[\"hard\",\"round\"],optionTitles:[\"Hard\",\"Round\"],defaultValue:\"round\",displaySegmentedControl:true,hidden:({type})=>type!==\"default\"},size:{type:ControlType.Number,title:\"Size\",defaultValue:12,min:8,max:24,step:1},customIcon:{type:ControlType.Image,title:\"Image\",hidden:({type})=>type!==\"custom\"}}},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:8,min:0,max:40,step:1,hidden:({type})=>type===\"button\"},padding:{type:ControlType.FusedNumber,title:\"Padding\",defaultValue:8,toggleKey:\"paddingPerSide\",toggleTitles:[\"All\",\"Sides\"],valueKeys:[\"paddingTop\",\"paddingRight\",\"paddingBottom\",\"paddingLeft\"],valueLabels:[\"T\",\"R\",\"B\",\"L\"],min:0},stacked:{type:ControlType.Enum,title:\"Layout\",options:[\"horizontal\",\"vertical\"],optionTitles:[\"Horizontal\",\"Vertical\"],optionIcons:[\"direction-horizontal\",\"direction-vertical\"],displaySegmentedControl:true,defaultValue:\"horizontal\",hidden:({type})=>type===\"button\"}}},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\"},default:{type:ControlType.Object,title:\"Default\",controls:{textColor:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#000000\"},border:{type:ControlType.Object,title:\"Border\",controls:{color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},width:{type:ControlType.FusedNumber,title:\"Width\",toggleKey:\"isMixed\",toggleTitles:[\"All\",\"Individual\"],valueKeys:[\"top\",\"right\",\"bottom\",\"left\"],valueLabels:[\"T\",\"R\",\"B\",\"L\"],min:0,defaultValue:1},style:{type:ControlType.Enum,title:\"Style\",options:[\"solid\",\"dashed\",\"dotted\",\"double\"],optionTitles:[\"Solid\",\"Dashed\",\"Dotted\",\"Double\"],defaultValue:\"solid\"}}},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"#FFFFFF\"}}},hover:{type:ControlType.Object,title:\"Hover\",controls:{textColor:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#333333\"},border:{type:ControlType.Object,title:\"Border\",controls:{color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},width:{type:ControlType.FusedNumber,title:\"Width\",toggleKey:\"isMixed\",toggleTitles:[\"All\",\"Individual\"],valueKeys:[\"top\",\"right\",\"bottom\",\"left\"],valueLabels:[\"T\",\"R\",\"B\",\"L\"],min:0,defaultValue:1},style:{type:ControlType.Enum,title:\"Style\",options:[\"solid\",\"dashed\",\"dotted\",\"double\"],optionTitles:[\"Solid\",\"Dashed\",\"Dotted\",\"Double\"],defaultValue:\"solid\"}}},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"#FFFFFF\"}}},selected:{type:ControlType.Object,title:\"Selected\",controls:{textColor:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#000000\"},border:{type:ControlType.Object,title:\"Border\",controls:{color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},width:{type:ControlType.FusedNumber,title:\"Width\",toggleKey:\"isMixed\",toggleTitles:[\"All\",\"Individual\"],valueKeys:[\"top\",\"right\",\"bottom\",\"left\"],valueLabels:[\"T\",\"R\",\"B\",\"L\"],min:0,defaultValue:1},style:{type:ControlType.Enum,title:\"Style\",options:[\"solid\",\"dashed\",\"dotted\",\"double\"],optionTitles:[\"Solid\",\"Dashed\",\"Dotted\",\"Double\"],defaultValue:\"solid\"}}},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"#000000\"}}},// Filter Type Toggle\n// filterType: {\n//     type: ControlType.Enum,\n//     title: \"Filter\",\n//     options: [\"shopify\", \"cms\"],\n//     optionTitles: [\"Shopify\", \"CMS\"],\n//     displaySegmentedControl: true,\n//     defaultValue: \"shopify\",\n// },\n// // CMS specific controls\n// cmsTitle: {\n//     type: ControlType.String,\n//     title: \"CMS Title\",\n//     placeholder: \"Category\",\n//     hidden: (props) => props.filterType !== \"cms\",\n// },\n// cmsValue: {\n//     type: ControlType.String,\n//     title: \"CMS Value\",\n//     placeholder: \"Fashion\",\n//     hidden: (props) => props.filterType !== \"cms\",\n// },\n// Functional props\nproperty:{type:ControlType.Enum,title:\"Property\",options:[\"variant\",\"product-type\",\"product-tag\",\"collection\",\"price\",\"on-sale\",\"discount\",\"in-stock\",\"subscriptions\"],optionTitles:[\"Variant\",\"Product Type\",\"Product Tag\",\"Collection\",\"Price\",\"On Sale\",\"Discount\",\"In Stock\",\"Subscriptions\"],defaultValue:\"price\",hidden:props=>props.filterType===\"cms\"},// Collection, Product Type, Product Tag value\nvalue:{type:ControlType.String,title:\"Value\",defaultValue:\"\",hidden:props=>{if(props.filterType===\"cms\")return true;const validProperties=[\"collection\",\"product-type\",\"product-tag\"];return!validProperties.includes(String(props.property));}},displayText:{type:ControlType.String,title:\"Display Text\",description:\"If not set, value will be used.\",hidden:props=>props.property===\"variant\"},// Price filter controls\npriceType:{type:ControlType.Enum,title:\"Type\",options:[\"Range\",\"Under\",\"Over\"],optionTitles:[\"Range\",\"Under\",\"Over\"],defaultValue:\"Under\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\",hidden:props=>props.property!==\"price\"||props.filterType===\"cms\"},priceThreshold:{type:ControlType.Number,title:\"Under\",defaultValue:100,min:0,step:1,hidden:props=>props.property!==\"price\"||props.priceType!==\"Under\"||props.filterType===\"cms\"},priceOver:{type:ControlType.Number,title:\"Over\",defaultValue:50,min:0,step:1,hidden:props=>props.property!==\"price\"||props.priceType!==\"Over\"||props.filterType===\"cms\"},priceLow:{type:ControlType.Number,title:\"Price Low\",defaultValue:50,min:0,step:1,hidden:props=>props.property!==\"price\"||props.priceType!==\"Range\"||props.filterType===\"cms\"},priceHigh:{type:ControlType.Number,title:\"Price High\",defaultValue:100,min:0,step:1,hidden:props=>props.property!==\"price\"||props.priceType!==\"Range\"||props.filterType===\"cms\"},// Discount filter controls\ndiscountType:{type:ControlType.Enum,title:\"Discount\",options:[\"Percent\",\"Amount\"],optionTitles:[\"Percent\",\"Amount\"],defaultValue:\"Percent\",displaySegmentedControl:true,hidden:props=>props.property!==\"discount\"||props.filterType===\"cms\"},discountValueType:{type:ControlType.Enum,title:\"Type\",options:[\"Range\",\"Over\"],optionTitles:[\"Range\",\"Over\"],defaultValue:\"Over\",displaySegmentedControl:true,hidden:props=>props.property!==\"discount\"||props.filterType===\"cms\"},discountThreshold:{type:ControlType.Number,title:\"Discount Threshold\",defaultValue:100,min:0,step:1,hidden:props=>props.property!==\"discount\"||props.discountValueType!==\"Over\"||props.filterType===\"cms\"},discountLow:{type:ControlType.Number,title:\"Discount Low\",defaultValue:50,min:0,step:1,hidden:props=>props.property!==\"discount\"||props.discountValueType!==\"Range\"||props.filterType===\"cms\"},discountHigh:{type:ControlType.Number,title:\"Discount High\",defaultValue:100,min:0,step:1,hidden:props=>props.property!==\"discount\"||props.discountValueType!==\"Range\"||props.filterType===\"cms\"},// Variant controls\nvariantTitle:{type:ControlType.String,title:\"Title\",defaultValue:\"Size\",hidden:props=>props.property!==\"variant\"||props.filterType===\"cms\"||props.variantType===\"Metafield\"},variantValue:{type:ControlType.String,title:\"Value\",defaultValue:\"Large\",hidden:props=>props.property!==\"variant\"||props.filterType===\"cms\"},variantDisplayText:{type:ControlType.String,title:\"Display Text\",description:\"If not set, Value will be displayed.\",hidden:props=>props.property!==\"variant\"||props.filterType===\"cms\"},showText:{type:ControlType.Boolean,title:\"Show Text\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",hidden:props=>props.property!==\"variant\"||props.filterType===\"cms\"},variantStockFilter:{type:ControlType.Enum,title:\"In Stock Only\",options:[\"all\",\"in_stock\"],optionTitles:[\"No\",\"Yes\"],defaultValue:\"all\",displaySegmentedControl:true,hidden:props=>props.property!==\"variant\"||props.filterType===\"cms\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FC_CatalogFilterButton\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FC_CatalogFilterButton.map", "/*\n * Framer Commerce\n * Confidential and Proprietary - All Rights Reserved\n * Unauthorized use, reproduction, distribution, or disclosure of this\n * source code or any related information is strictly prohibited.\n *\n * This software is the exclusive property of Framer Commerce (\"Company\").\n * It is considered highly confidential and proprietary information.\n *\n * Any use, copying, modification, distribution, or sharing of this software,\n * in whole or in part, without the express written permission of the Company\n * is strictly prohibited and may result in legal action.\n *\n * DISCLAIMER: This software does not provide any express or\n * implied warranties, including, but not limited to, the implied warranties\n * of merchantability and fitness for a particular purpose. In no event shall\n * Framer Commerce be liable for any direct, indirect, incidental, special,\n * exemplary, or consequential damages (including, but not limited to, procurement\n * of substitute goods or services; loss of use, data, or profits; or business\n * interruption) however caused and on any theory of liability, whether in\n * contract, strict liability, or tort (including negligence or otherwise)\n * arising in any way out of the use of this software, even if advised of\n * the possibility of such damage.\n *\n * Any unauthorized possession, use, copying, distribution, or dissemination\n * of this software will be considered a breach of confidentiality and may\n * result in legal action.\n *\n * For inquiries, contact:\n * Framer Commerce\n * Email: hello@framercommerce.com\n *\n * \u00A9 2025 Butter Supply Inc. All Rights Reserved.\n */function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{debounce}from\"lodash-es\";import{parseUrlFilters,updateUrlWithFilters}from\"https://framerusercontent.com/modules/A55TPw8oJtDToWtsjcDZ/efvR3aKErSMemVA7DBdP/filterMappings.js\";// Global state management to prevent duplicate instances\nconst globalSortState={instances:new Set,eventListeners:new Map,cleanup:()=>{globalSortState.instances.clear();globalSortState.eventListeners.forEach((listener,event)=>{window.removeEventListener(event,listener);});globalSortState.eventListeners.clear();},lastUrl:typeof window!==\"undefined\"?window.location.href:\"\",isBackToFilter:false};// Ensure cleanup on page unload\nif(typeof window!==\"undefined\"){window.addEventListener(\"beforeunload\",globalSortState.cleanup);}// Helper function to find 13-digit number\nfunction findDeep13DigitNumber(obj){if(typeof obj===\"string\"){const match=obj.match(/\\d{12,}/);if(match)return match[0];return null;}if(!obj||typeof obj!==\"object\")return null;for(const key in obj){if(Array.isArray(obj[key])||typeof obj[key]===\"object\"){const found=findDeep13DigitNumber(obj[key]);if(found)return found;}else if(typeof obj[key]===\"string\"){const match=obj[key].match(/\\d{12,}/);if(match)return match[0];}}return null;}class ErrorBoundary extends React.Component{static getDerivedStateFromError(error){return{hasError:true,error};}componentDidCatch(error,errorInfo){console.error(\"CMS Error:\",error,errorInfo);}render(){if(this.state.hasError){return /*#__PURE__*/_jsx(\"div\",{style:{padding:20,color:\"red\"},children:\"Something went wrong loading the CMS content.\"});}// @ts-ignore: TypeScript doesn't recognize props in this context\nreturn this.props.children;}constructor(props){super(props);_define_property(this,\"state\",{hasError:false,error:null});}}// Let's add a helper function for consistent logging\nconst logDebug=(component,action,data)=>{// console.log(`\uD83D\uDD0D [${component}] ${action}:`, data)\n};// Helper function to get active search fields based on scope settings\nfunction getActiveSearchFields(scope){const fields=[];if(scope?.title)fields.push(\"title\");if(scope?.productType)fields.push(\"productType\");if(scope?.productTag)fields.push(\"tags\");if(scope?.collection)fields.push(\"collections\");if(scope?.vendor)fields.push(\"vendor\");if(scope?.variants)fields.push(\"variants\");return fields;}/**\n * @framerDisableUnlink\n */export default function FC_CatalogDisplay(props){// State declarations at the top of the component\nconst[isLoading,setIsLoading]=React.useState(true);const[sortedChildren,setSortedChildren]=React.useState(null);const[products,setProducts]=React.useState([]);const[favorites,setFavorites]=React.useState([]);const[isTransitioning,setIsTransitioning]=React.useState(false);const[isSettling,setIsSettling]=React.useState(false);// console.log(\"\uD83D\uDEA8\uD83D\uDEA8\uD83D\uDEA8 COMPONENT MOUNTED \uD83D\uDEA8\uD83D\uDEA8\uD83D\uDEA8\", {\n//     hasCollection: !!props.Collection,\n//     hasProducts:\n//         typeof window !== \"undefined\" && !!window.shopXtools?.products,\n//     url: typeof window !== \"undefined\" ? window.location.href : null,\n// })\n// Keep a log of component initialization\nlogDebug(\"ProductSort\",\"Component initializing\",{props:Object.keys(props)});const{Collection,pageType,Metafields}=props;const includeMetafields=Metafields?.include||false;const transitionTimeoutRef=React.useRef(null);const settlingTimeoutRef=React.useRef(null);const lastUpdateRef=React.useRef(null);const urlParams=typeof window!==\"undefined\"?new URLSearchParams(window.location.search):new URLSearchParams;// Add pagination state\nconst[currentPage,setCurrentPage]=React.useState(()=>{if(typeof window!==\"undefined\"){const pageParam=urlParams.get(\"page\");return pageParam?parseInt(pageParam):1;}return 1;});const[hasMore,setHasMore]=React.useState(false);const observerRef=React.useRef(null);const loadMoreRef=React.useRef(null);const itemsPerPage=props.Pagination?.items||8;// Add state to maintain full product list\nconst[allProducts,setAllProducts]=React.useState([]);const[displayedProducts,setDisplayedProducts]=React.useState([]);// Add search state\nconst[searchConfig,setSearchConfig]=React.useState(()=>{// Initialize from URL parameter if it exists\nif(typeof window!==\"undefined\"){const urlParams=new URLSearchParams(window.location.search);const searchParam=urlParams.get(\"search\");// console.log(\"\uD83D\uDD0D Initializing search from URL:\", {\n//     url: window.location.href,\n//     searchParam,\n//     allParams: Object.fromEntries(urlParams.entries()),\n// })\nif(searchParam){return{term:searchParam,fields:getActiveSearchFields(props.Search?.Scope),active:true};}}return{term:\"\",fields:getActiveSearchFields(props.Search?.Scope),active:false};});// Add effect to update search fields when scope changes\nReact.useEffect(()=>{setSearchConfig(prev=>({...prev,fields:getActiveSearchFields(props.Search?.Scope)}));},[props.Search?.Scope]);// Adjust initial state based on search settings\nReact.useEffect(()=>{if(props.Search.initialSearchState===\"none\"&&props.Search.enableSearch&&!searchConfig.term){// console.log(\"Applying initial 'none' state\")\nsetSortedChildren([])// Start with no products displayed\n;// Disable pagination buttons for both load more and next/prev types because there are no products to display\nsetTimeout(()=>{if(props.Pagination?.type===\"load_more\"){const hasMoreItemsEvent=new CustomEvent(\"hide-loadmore-button\",{detail:{hasMoreItems:false}});document.dispatchEvent(hasMoreItemsEvent);//console.log(\"hide-loadmore-button dispatched (delayed)\", hasMoreItemsEvent);\n}else if(props.Pagination?.type===\"next_prev\"){const updateNextPrevButtonsEvent=new CustomEvent(\"update_next_prev_buttons\",{detail:{hasMoreItems:false,type:props.Pagination?.type,currentPage:1}});document.dispatchEvent(updateNextPrevButtonsEvent);//console.log(\"update_next_prev_buttons dispatched (delayed)\", updateNextPrevButtonsEvent);\n}},100)// 100ms delay to ensure listeners are attached\n;}},[props.Search.initialSearchState,props.Search.enableSearch,searchConfig.term]);// Function to get paginated products\nconst getPaginatedProducts=React.useCallback(products=>{if(!props.Pagination?.enable||!Array.isArray(products))return products;let startIndex,endIndex,paginatedProducts;switch(props.Pagination.type){case\"load_more\":// For Load More, show all items up to current page\nstartIndex=0;endIndex=currentPage*itemsPerPage;paginatedProducts=products.slice(startIndex,endIndex);const hasMoreLoadMore=endIndex<products.length;setHasMore(hasMoreLoadMore);// console.log(\"hasMoreLoadMore\", hasMoreLoadMore)\n// console.log(\"products.length\", products?.length)\n// console.log(\"currentPage\", currentPage)\n// console.log(\"itemsPerPage\", itemsPerPage)\n// console.log(\"endIndex\", endIndex)\n// console.log(\"searchConfig.active\", searchConfig.active)\nif(!hasMoreLoadMore){const hasMoreItemsEvent=new CustomEvent(\"hide-loadmore-button\",{detail:{hasMoreItems:hasMoreLoadMore}});document.dispatchEvent(hasMoreItemsEvent);//console.log(\"hide-loadmore-button dispatched\", hasMoreItemsEvent)\n}break;case\"next_prev\":// For Next/Previous, show only current page items\nstartIndex=(currentPage-1)*itemsPerPage;endIndex=startIndex+itemsPerPage;paginatedProducts=products.slice(startIndex,endIndex);const hasMoreNextPrev=endIndex<products.length;setHasMore(hasMoreNextPrev);const updateNextPrevButtonsEvent=new CustomEvent(\"update_next_prev_buttons\",{detail:{hasMoreItems:hasMoreNextPrev,type:props.Pagination?.type,currentPage}});document.dispatchEvent(updateNextPrevButtonsEvent);break;case\"infinite\":// For Infinite Scroll, show all items up to current page\nstartIndex=0;endIndex=currentPage*itemsPerPage;paginatedProducts=products.slice(startIndex,endIndex);const hasMoreInfinite=endIndex<products.length;setHasMore(hasMoreInfinite);break;default:return products;}return paginatedProducts;},[currentPage,itemsPerPage,props.Pagination?.enable,props.Pagination?.type]);// Add effect to handle URL pagination parameters\nReact.useEffect(()=>{if(typeof window===\"undefined\"||!props.Pagination?.enable)return;const url=new URL(window.location.href);const urlParams=new URLSearchParams(url.search);// // Update page parameter\n// if (props.Pagination?.enable) {\n//     if (currentPage > 1) {\n//         urlParams.set(\"page\", currentPage.toString())\n//     } else {\n//         urlParams.delete(\"page\")\n//     }\n// } else {\n//     urlParams.delete(\"page\")\n// }\n// // Update URL without triggering a page reload\n// window.history.pushState(\n//     { page: currentPage },\n//     \"\",\n//     url.toString()\n// )\nif(currentPage>1){urlParams.set(\"page\",currentPage.toString());}else{urlParams.delete(\"page\");}const newUrl=`${url.pathname}?${urlParams.toString()}`;if(newUrl!==window.location.pathname+window.location.search){//console.log(\"\uD83D\uDCCC Pushing new page URL:\", newUrl)\nwindow.history.pushState({page:currentPage},\"\",newUrl);}},[currentPage,props.Pagination?.enable]);// Update the infinite scroll effect\nReact.useEffect(()=>{if(!props.Pagination?.enable||props.Pagination?.type!==\"infinite\"||typeof window===\"undefined\")return;console.log(\"[CMS] Setting up infinite scroll observer\",{hasMore,isLoading,currentPage,loadMoreRefExists:!!loadMoreRef.current});const observer=new IntersectionObserver(entries=>{const target=entries[0];console.log(\"[CMS] Intersection observed:\",{isIntersecting:target.isIntersecting,hasMore,isLoading,currentPage});if(target.isIntersecting&&hasMore&&!isLoading){console.log(\"[CMS] Loading more items, incrementing page\");setCurrentPage(prev=>prev+1);}},{root:null,rootMargin:\"100px\",threshold:.1});if(loadMoreRef.current){console.log(\"[CMS] Observing load more trigger element\");observer.observe(loadMoreRef.current);}return()=>{if(observer){console.log(\"[CMS] Cleaning up observer\");observer.disconnect();}};},[hasMore,props.Pagination?.enable,props.Pagination?.type,isLoading,currentPage]);// Update the sorted children wrapper to include the infinite scroll trigger\nconst updateSortedChildrenWithTransition=newChildren=>{if(!newChildren){console.warn(\"[CMS] Received null/undefined children\");return;}// console.log(\"[CMS] Starting transition update:\", {\n//     totalChildren: newChildren.length,\n//     currentPage,\n//     paginationType: props.Pagination?.type,\n//     hasMore,\n// })\n// Store the full list\nsetAllProducts(newChildren);// Get paginated subset for display\nconst paginatedChildren=getPaginatedProducts(newChildren);//console.log(\"[CMS] hasMore:\", hasMore)\n// Add infinite scroll trigger if needed\nif(props.Pagination?.enable&&props.Pagination?.type===\"infinite\"&&hasMore&&paginatedChildren.length>0){console.log(\"[CMS] Adding infinite scroll trigger\");paginatedChildren.push(/*#__PURE__*/_jsx(\"div\",{ref:loadMoreRef,style:{width:\"100%\",height:\"50px\",gridColumn:\"1 / -1\",opacity:0,pointerEvents:\"none\"}},\"infinite-scroll-trigger\"));}logDebug(\"ProductSort\",\"Updating sorted children with transition\",{totalChildren:newChildren.length,paginatedChildren:paginatedChildren.length,currentPage,isSettling,hasMore});const now=Date.now();if(lastUpdateRef.current&&now-lastUpdateRef.current<100){setIsSettling(true);if(settlingTimeoutRef.current){clearTimeout(settlingTimeoutRef.current);}//console.log(\"[CMS] Delaying transition\")\nsettlingTimeoutRef.current=setTimeout(()=>{setIsSettling(false);setDisplayedProducts(paginatedChildren);performTransition(paginatedChildren);},150);}else{//console.log(\"[CMS] Immediate transition\")\nsetDisplayedProducts(paginatedChildren);performTransition(paginatedChildren);}lastUpdateRef.current=now;};// Add logging for URL parameters\nif(typeof window!==\"undefined\"){logDebug(\"ProductSort\",\"URL parameters on init\",{url:window.location.href,params:Object.fromEntries(urlParams.entries())});}const[sortConfig,setSortConfig]=React.useState(()=>{// First try to get sort from URL parameter\nif(typeof window!==\"undefined\"){const urlParams=new URLSearchParams(window.location.search);const sortParam=urlParams.get(\"sort\");logDebug(\"ProductSort\",\"Sort parameter from URL\",{sortParam});if(sortParam){// Map URL sort parameter to internal sort configuration\nswitch(sortParam){case\"relevance\":return{type:\"relevancy\",sortBy:\"relevancy\",sortDirection:null};case\"title_asc\":return{type:\"name\",sortBy:\"name\",sortDirection:\"aToZ\"};case\"title_desc\":return{type:\"name\",sortBy:\"name\",sortDirection:\"zToA\"};case\"price_asc\":return{type:\"price\",sortBy:\"price\",sortDirection:\"lowToHigh\"};case\"price_desc\":return{type:\"price\",sortBy:\"price\",sortDirection:\"highToLow\"};case\"newest\":return{type:\"created\",sortBy:\"created\",sortDirection:\"newest\"};case\"best_selling\":return{type:\"best-selling\",sortBy:\"best-selling\",sortDirection:null};}}// Then check session storage\nconst storedSort=sessionStorage.getItem(\"sortBy\");if(storedSort){switch(storedSort){case\"relevance\":return{type:\"relevancy\",sortBy:\"relevancy\",sortDirection:null};case\"title_asc\":return{type:\"name\",sortBy:\"name\",sortDirection:\"aToZ\"};case\"title_desc\":return{type:\"name\",sortBy:\"name\",sortDirection:\"zToA\"};case\"price_asc\":return{type:\"price\",sortBy:\"price\",sortDirection:\"lowToHigh\"};case\"price_desc\":return{type:\"price\",sortBy:\"price\",sortDirection:\"highToLow\"};case\"newest\":return{type:\"created\",sortBy:\"created\",sortDirection:\"newest\"};case\"best_selling\":return{type:\"best-selling\",sortBy:\"best-selling\",sortDirection:null};}}}// If no URL parameter or session storage, use the default sort from props\nswitch(props.defaultSort){case\"relevance\":return{type:\"relevancy\",sortBy:\"relevancy\",sortDirection:null};case\"title_asc\":return{type:\"name\",sortBy:\"name\",sortDirection:\"aToZ\"};case\"title_desc\":return{type:\"name\",sortBy:\"name\",sortDirection:\"zToA\"};case\"price_asc\":return{type:\"price\",sortBy:\"price\",sortDirection:\"lowToHigh\"};case\"price_desc\":return{type:\"price\",sortBy:\"price\",sortDirection:\"highToLow\"};case\"newest\":return{type:\"created\",sortBy:\"created\",sortDirection:\"newest\"};case\"best_selling\":return{type:\"best-selling\",sortBy:\"best-selling\",sortDirection:null};default:return{type:\"relevancy\",sortBy:\"relevancy\",sortDirection:null};}});const[filters,setFilters]=React.useState(()=>{//console.log(\"props.display for scopes\", props.display)\n// Create the initial filter state based on props\nconst initialFilters={collection:{active:props.display===\"Collection\"&&props.value?true:false,values:props.display===\"Collection\"&&props.value?[props.value]:[]},product_type:{active:props.display===\"Product Type\"&&props.value?true:false,values:props.display===\"Product Type\"&&props.value?[props.value]:[]},product_tag:{active:props.display===\"Product Tag\"&&props.value?true:false,values:props.display===\"Product Tag\"&&props.value?[props.value]:[]},on_sale:{active:false,value:true},in_stock:{active:false,value:true},bundle:{active:false,value:true},subscription:{active:false,value:true},price:{active:false,values:[]},discount_amount:{active:false,values:[]},discount_percent:{active:false,values:[]},variant:{active:false,values:[]}};// Log the initial filter state\nlogDebug(\"ProductSort\",\"Initial filter state created\",{display:props.display,value:props.value,filters:initialFilters,activeFilters:Object.entries(initialFilters).filter(([key,filter])=>filter.active).reduce((acc,[key,filter])=>({...acc,[key]:filter}),{})});// First try to parse filters directly from URL\nif(typeof window!==\"undefined\"){const url=new URL(window.location.href);logDebug(\"ProductSort\",\"Attempting to parse filters from URL for scopes\",{url:url.toString(),search:url.search});try{const urlFilters=parseUrlFilters(url.searchParams);logDebug(\"ProductSort\",\"Filters parsed from URL for scopes\",urlFilters);if(urlFilters&&Object.keys(urlFilters).length>0){const activeFilters=Object.entries(urlFilters).filter(([key,filter])=>filter.active).reduce((acc,[key,filter])=>({...acc,[key]:filter}),{});logDebug(\"ProductSort\",\"Active filters from URL for scopes\",activeFilters);if(Object.keys(activeFilters).length>0){// Merge URL filters with initial scope instead of replacing them\nconst mergedFilters={...initialFilters};logDebug(\"ProductSort\",\"Merged filters from URL for scopes\",mergedFilters);// For each filter type that has an initial scope, ensure it's preserved\nif(props.display===\"Collection\"&&props.value){mergedFilters.collection={active:true,values:[props.value]};}else if(props.display===\"Product Type\"&&props.value){mergedFilters.product_type={active:true,values:[props.value]};}else if(props.display===\"Product Tag\"&&props.value){mergedFilters.product_tag={active:true,values:[props.value]};}// console.log(\"Props - Tag:\", {\n//     active:\n//         props.display === \"Product Tag\" && props.value\n//             ? true\n//             : false,\n//     values:\n//         props.display === \"Product Tag\" && props.value\n//             ? [props.value]\n//             : [],\n// })\n// console.log(\"Props:\", props.display)\n// Then apply URL filters for other filter types\nObject.entries(urlFilters).forEach(([key,filter])=>{if(key===\"collection\"&&props.display===\"Collection\"&&props.value||key===\"product_type\"&&props.display===\"Product Type\"&&props.value||key===\"product_tag\"&&props.display===\"Product Tag\"&&props.value){// Merge values for the scoped filter\nmergedFilters[key]={active:true,values:[...new Set([...mergedFilters[key].values,...filter.values||[]])]};}else{// For non-scoped filters, use the URL filter\nmergedFilters[key]=filter;}});logDebug(\"ProductSort\",\"Merged filters\",mergedFilters);return mergedFilters;}}}catch(error){console.error(\"\u274C Error parsing URL filters:\",error);}}// If no URL filters or error, return the initial filters\nreturn initialFilters;});// Memoize event handlers\nconst handleProductsReady=React.useCallback(e=>{logDebug(\"ProductSort\",\"Products ready event received\",{eventType:e.type,shopXToolsAvailable:typeof window!==\"undefined\"&&!!window.shopXtools,shopXProductsCount:typeof window!==\"undefined\"?window.shopXtools?.products?.length:0});// First try to get products from shopXtools\nif(typeof window!==\"undefined\"&&window.shopXtools?.products){// console.log(\"\uD83D\uDEA8 Setting products from shopXtools \uD83D\uDEA8\", {\n//     count: window.shopXtools.products.length,\n//     sample: window.shopXtools.products[0]?.node,\n//     sampleTitle:\n//         window.shopXtools.products[0]?.node?.title ||\n//         \"No title\",\n//     hasNode: !!window.shopXtools.products[0]?.node,\n//     searchConfig: searchConfig,\n//     searchActive: searchConfig.active,\n//     searchTerm: searchConfig.term,\n// })\n// Important: shopXtools.products is already in the correct format with node structure\nsetProducts(window.shopXtools.products);// After setting products, force a re-filter if search is active\nif(searchConfig.active&&searchConfig.term){// console.log(\n//     \"\uD83D\uDD0D Active search detected during product load, forcing re-filter\"\n// )\nsetSortedChildren(null);}}else if(Array.isArray(e.detail.products)){// console.log(\"\uD83D\uDEA8 Setting products from event \uD83D\uDEA8\", {\n//     count: e.detail.products.length,\n//     sample: e.detail.products[0],\n//     sampleTitle:\n//         e.detail.products[0]?.node?.title || \"No title\",\n//     hasNode: !!e.detail.products[0]?.node,\n//     searchConfig: searchConfig,\n//     searchActive: searchConfig.active,\n//     searchTerm: searchConfig.term,\n// })\nsetProducts(e.detail.products);// After setting products, force a re-filter if search is active\nif(searchConfig.active&&searchConfig.term){// console.log(\n//     \"\uD83D\uDD0D Active search detected during product load, forcing re-filter\"\n// )\nsetSortedChildren(null);}}},[searchConfig]);const handleSortChange=React.useCallback(e=>{setSortConfig(e.detail);setSortedChildren(null)// Reset sorted children to trigger resort\n;},[]);const handleFilterReset=React.useCallback(e=>{// console.log(\"Resetting filters\", e)\n// Check if we should reset to initial scope\nconst shouldResetToInitialScope=e?.detail?.resetToInitialScope===true;// console.log(\n//     \"Should reset to initial scope:\",\n//     shouldResetToInitialScope\n// )\nif(shouldResetToInitialScope){// Create a reset state that respects the initial filter scope\nconst resetFilters={collection:{active:props.display===\"Collection\"&&props.value?true:false,values:props.display===\"Collection\"&&props.value?[props.value]:[]},product_type:{active:props.display===\"Product Type\"&&props.value?true:false,values:props.display===\"Product Type\"&&props.value?[props.value]:[]},product_tag:{active:props.display===\"Product Tag\"&&props.value?true:false,values:props.display===\"Product Tag\"&&props.value?[props.value]:[]},on_sale:{active:false,value:true},in_stock:{active:false,value:true},bundle:{active:false,value:true},subscription:{active:false,value:true},price:{active:false,values:[]},discount_amount:{active:false,values:[]},discount_percent:{active:false,values:[]},variant:{active:false,values:[]}};// console.log(\"Resetting to initial filter scope:\", resetFilters)\nsetFilters(resetFilters);}else{// Reset all filters to inactive\nsetFilters({collection:{active:false,values:[]},product_type:{active:false,values:[]},product_tag:{active:false,values:[]},on_sale:{active:false,value:true},in_stock:{active:false,value:true},bundle:{active:false,value:true},subscription:{active:false,value:true},price:{active:false,values:[]},discount_amount:{active:false,values:[]},discount_percent:{active:false,values:[]},variant:{active:false,values:[]}});}setSortedChildren(null)// Reset sorted children to trigger filter reset\n;},[props.display,props.value]);const handleFilter=React.useCallback(e=>{const{type,value,active}=e.detail;// console.log(\n//     \"Received filter event:\",\n//     e?.detail || \"Reset filter event is not receieved\"\n// )\nlogDebug(\"ProductSort\",\"Processing filter event\",{type:e.detail.type,group:e.detail.group,active:e.detail.active,value:e.detail.value,filterType:e.detail.filterType,componentId:e.detail.componentId});// Check if this filter matches the initial filter scope\nconst isInitialFilter=type===\"collection\"&&props.display===\"Collection\"&&props.value===value||type===\"product_type\"&&props.display===\"Product Type\"&&props.value===value||type===\"product_tag\"&&props.display===\"Product Tag\"&&props.value===value;// If this is the initial filter and we're trying to deactivate it, ignore the event\nif(isInitialFilter&&!active){// console.log(\"Ignoring deactivation of initial filter scope\")\nreturn;}// Continue with normal filter handling\nsetFilters(prev=>{const newFilters={...prev};const{type,group,active,value,filterType,variantStockFilter}=e.detail;// console.log(\"Processing filter:\", {\n//     type,\n//     group,\n//     active,\n//     value,\n//     filterType,\n//     variantStockFilter,\n// })\n// Log previous state of this filter\nlogDebug(\"ProductSort\",\"Filter state before update\",{filterType:type,previousState:prev[type]||\"not set\",newActive:active,newValue:value});// Use filterMappings to handle the filter\nif(type.startsWith(\"variant_\")){// Handle dynamic variant filters\nconst variantName=type.replace(\"variant_\",\"\");// Add more comprehensive debugging for variant filters\n// console.log(\"\uD83D\uDEA8 Processing variant filter:\", {\n//     type,\n//     variantName,\n//     active,\n//     variantStockFilter,\n//     value,\n//     isMultiValue:\n//         typeof value === \"string\" && value.includes(\",\"),\n//     multipleValues:\n//         typeof value === \"string\" && value.includes(\",\")\n//             ? value.split(\",\").filter(Boolean)\n//             : null,\n//     currentVariantValues:\n//         newFilters.variant?.values?.filter(\n//             (v) => v.name === variantName\n//         ) || [],\n//     rawValue: value,\n//     decodedValue:\n//         typeof value === \"string\"\n//             ? decodeURIComponent(value)\n//             : value,\n// })\nif(active){if(!newFilters.variant){newFilters.variant={active:true,values:[],variantStockFilter:variantStockFilter||undefined};}else if(variantStockFilter){newFilters.variant.variantStockFilter=variantStockFilter;}// Check if value is a comma-separated list - support both encoded and decoded commas\n// Both %2C and , should be treated as delimiters\nlet valueToProcess=value;if(typeof value===\"string\"){// First decode the value to handle any URL encoding\nvalueToProcess=decodeURIComponent(value);}if(typeof valueToProcess===\"string\"&&valueToProcess.includes(\",\")){// Handle multiple comma-separated values (OR condition)\nconst variantValues=valueToProcess.split(\",\").filter(Boolean);// console.log(\"Processing multiple variant values:\", {\n//     variantName,\n//     variantValues,\n//     original: valueToProcess,\n// })\n// Add each value as a separate entry\nvariantValues.forEach(val=>{// Check if this value already exists to avoid duplicates\nconst exists=newFilters.variant.values.some(v=>v.name.toLowerCase()===variantName.toLowerCase()&&v.value.toLowerCase()===val.trim().toLowerCase());if(!exists){newFilters.variant.values.push({name:variantName,value:val.trim()});}});}else{// Handle single value\n// Check if this value already exists\nconst exists=newFilters.variant.values.some(v=>v.name.toLowerCase()===variantName.toLowerCase()&&v.value.toLowerCase()===String(valueToProcess).toLowerCase());if(!exists){newFilters.variant.values.push({name:variantName,value:valueToProcess});}}newFilters.variant.active=true;}else{if(newFilters.variant&&newFilters.variant.values){// console.log(\n//     \"[Variant Removal] Initial variant values:\",\n//     newFilters.variant.values\n// )\n// Check if we're removing a comma-separated list - support both encoded and decoded commas\nlet valueToProcess=value;// console.log(\n//     \"[Variant Removal] Value to process\",\n//     valueToProcess\n// )\nif(typeof value===\"string\"){// First decode the value to handle any URL encoding\nvalueToProcess=decodeURIComponent(value);// console.log(\n//     \"[Variant Removal] Value to process (decoded)\",\n//     valueToProcess\n// )\n}if(typeof valueToProcess===\"string\"&&valueToProcess.includes(\",\")){const variantValues=valueToProcess.split(\",\").filter(Boolean);// console.log(\n//     \"[Variant Removal] Comma-separated variant values:\",\n//     variantValues\n// )\n// Remove each value individually (case-insensitive)\nnewFilters.variant.values=newFilters.variant.values.filter(v=>{const nameMatches=v.name.toLowerCase()===variantName.toLowerCase();const valueMatches=v.value.toLowerCase()===String(valueToProcess).toLowerCase();const shouldRemove=nameMatches&&valueMatches;// console.log(\n//     \"[Variant Removal] Checking variant:\",\n//     {\n//         variant: v,\n//         nameMatches,\n//         valueMatches,\n//         shouldRemove,\n//     }\n// )\nreturn!shouldRemove;});}else{// Remove single value (case-insensitive)\nnewFilters.variant.values=newFilters.variant.values.filter(v=>{const nameMatches=v.name.toLowerCase()===variantName.toLowerCase();const valueMatches=v.value.toLowerCase()===String(valueToProcess).toLowerCase();const shouldRemove=nameMatches&&valueMatches;// console.log(\n//     \"[Variant Removal] Checking variant:\",\n//     {\n//         variant: v,\n//         nameMatches,\n//         valueMatches,\n//         shouldRemove,\n//     }\n// )\nreturn!shouldRemove;});}// console.log(\n//     \"[Variant Removal] Updated variant values:\",\n//     newFilters.variant.values\n// )\nnewFilters.variant.active=newFilters.variant.values.length>0;// console.log(\n//     \"[Variant Removal] Variant active state:\",\n//     newFilters.variant.active\n// )\n}}}else{// Handle other filter types\nswitch(type){case\"product_type\":case\"product_tag\":case\"collection\":logDebug(\"ProductSort\",`Processing ${type} filter`,{active,value,currentValues:newFilters[type].values});if(active){newFilters[type].values=[...newFilters[type].values||[],value];}else{newFilters[type].values=newFilters[type].values.filter(v=>v!==value);}newFilters[type].active=newFilters[type].values.length>0;logDebug(\"ProductSort\",`${type} filter updated`,{newActive:newFilters[type].active,newValues:newFilters[type].values});break;case\"price\":if(active){// console.log(\n//     \"\uD83C\uDFF7\uFE0F Processing ACTIVE price filter:\",\n//     {\n//         currentPriceFilter:\n//             newFilters.price.values,\n//         incomingValue: value,\n//     }\n// )\nif(!newFilters.price){newFilters.price={active:active,values:[]};}// Always ensure active state is set when adding ranges\nnewFilters.price.active=active;const newRange=value?.values?.[0];if(newRange){// console.log(\n//     \"\uD83C\uDFAF Processing new price range:\",\n//     {\n//         newRange,\n//         priceType: newRange.priceType,\n//         currentRanges:\n//             newFilters.price.values,\n//     }\n// )\n// Format the range based on priceType\nconst formattedRange={priceType:newRange.priceType,min:newRange.priceType===\"Under\"?null:newRange.min,max:newRange.priceType===\"Over\"?null:newRange.max};const rangeExists=newFilters.price.values.some(range=>range.priceType===formattedRange.priceType&&range.min===formattedRange.min&&range.max===formattedRange.max);if(!rangeExists){newFilters.price.values.push(formattedRange);// console.log(\n//     \"\u2705 Added new price range. Updated ranges:\",\n//     newFilters.price.values\n// )\n}}}else{// console.log(\n//     \"\uD83C\uDFF7\uFE0F Processing INACTIVE price filter:\",\n//     {\n//         currentPriceFilter: newFilters.price,\n//         incomingValue: value,\n//     }\n// )\nif(newFilters.price.active&&newFilters.price.values){// Loop through incoming values and remove them from current filters\nvalue.values?.forEach(valueRange=>{newFilters.price.values=newFilters.price.values.filter(currentRange=>{// Check if the current range matches the incoming range\nconst isMatchingRange=currentRange.priceType===valueRange.priceType&&currentRange.min===valueRange.min&&currentRange.max===valueRange.max;return!isMatchingRange// Remove only the matching range\n;});});}// Update the active state based on remaining ranges\nnewFilters.price.active=newFilters.price.values.length>0;}break;case\"discount_amount\":case\"discount_percent\":const discountType=type;if(!newFilters[discountType]){newFilters[discountType]={active:false,values:[]};}if(active){// Add new discount range\nnewFilters[discountType].values.push(...value.values);}else{// Remove discount range\nnewFilters[discountType].values=newFilters[discountType].values.filter(range=>!value.values.some(v=>v.min===range.min&&v.max===range.max));}// Update active state\nnewFilters[discountType].active=newFilters[discountType].values.length>0;break;case\"on_sale\":case\"in_stock\":case\"bundle\":case\"subscription\":newFilters[type]={active:active,value:true};break;default:console.warn(\"Unhandled filter type:\",type);}}logDebug(\"ProductSort\",\"Updated filters\",{filterType:type,newFilterState:newFilters[type],allActiveFilters:Object.entries(newFilters).filter(([key,filter])=>filter.active).reduce((acc,[key,filter])=>({...acc,[key]:filter}),{})});return newFilters;});// Force reset sorted children to trigger re-filter and re-sort\nlogDebug(\"ProductSort\",\"Resetting sorted children to trigger re-filtering\",null);setSortedChildren(null);},[props.display,props.value]);// Add a new handler for search events\nconst handleSearch=React.useCallback(e=>{// Only process search if it's enabled\nif(!props.Search?.enableSearch){return;}setSearchConfig({term:e.detail.term,fields:getActiveSearchFields(props.Search?.Scope),active:!!e.detail.term});setSortedChildren(null);},[props.Search?.enableSearch,props.Search?.Scope]);// Load favorites from localStorage\nReact.useEffect(()=>{if(typeof window===\"undefined\")return;const loadFavorites=()=>{const storedFavorites=JSON.parse(localStorage.getItem(\"favorites\")||\"[]\");// console.log(\"Loaded favorites:\", storedFavorites)\nsetFavorites(storedFavorites);};loadFavorites();const handleFavoritesUpdate=e=>{// console.log(\"favorites_updated event\", e.detail)\nconst{favorites:newFavorites,action,productId}=e.detail||{};// Set isTransitioning early to prevent flash\nif(pageType===\"favorites\"&&action===\"remove\"){setIsTransitioning(true);}if(action===\"remove\"&&productId){// console.log(\"Removing from favorites:\", productId)\nsetFavorites(prev=>{const updatedFavorites=prev.filter(id=>id!==productId);// Only retrigger UI if we're in favorites display mode\nif(pageType===\"favorites\"){// If we have sorted children already, prepare for a smoother transition\nif(sortedChildren&&sortedChildren.length>0){// Filter out the removed product from current view without setting to null\nconst updatedChildren=sortedChildren.filter(child=>{const key=child.key||\"\";return key!==productId;});if(updatedChildren.length>0){performTransition(updatedChildren);}else{// If all items removed, then do a full reset\nsetSortedChildren(null);}}else{setSortedChildren(null);}}return updatedFavorites;});}else if(action===\"add\"&&productId){// console.log(\"Adding to favorites:\", productId)\nsetFavorites(prev=>{const updatedFavorites=[...prev,productId];// Only retrigger UI if we're in favorites display mode\nif(pageType===\"favorites\"){setSortedChildren(null);}return updatedFavorites;});}else{//(\"Loading favorites with loadFavorites\")\nloadFavorites();// Only retrigger UI if we're in favorites display mode\nif(pageType===\"favorites\"){setSortedChildren(null);}}};document.addEventListener(\"favorites-updated\",handleFavoritesUpdate);return()=>{document.removeEventListener(\"favorites-updated\",handleFavoritesUpdate);};},[pageType,sortedChildren]);// Use global state management for event listeners\nReact.useEffect(()=>{// console.log(\"\uD83D\uDEA8 Setting up event listeners \uD83D\uDEA8\", {\n//     hasShopXTools: typeof window !== \"undefined\" && !!window.shopXtools,\n//     hasProducts:\n//         typeof window !== \"undefined\" && !!window.shopXtools?.products,\n//     productsCount:\n//         typeof window !== \"undefined\"\n//             ? window.shopXtools?.products?.length\n//             : 0,\n// })\n// Use global state management\nglobalSortState.instances.add(\"FC_CatalogDisplay\");// Add event listeners with proper typing\nconst handleProductsReadyEvent=e=>{// console.log(\"\uD83D\uDEA8 Received data__products-ready event \uD83D\uDEA8\", {\n//     hasEventDetail: !!e,\n//     hasProducts: !!(e as any).detail?.products,\n//     productsCount: (e as any).detail?.products?.length || 0,\n// })\nconst customEvent=e;logDebug(\"ProductSort\",\"data__products-ready event received\",{hasProducts:!!customEvent.detail?.products,count:customEvent.detail?.products?.length||0});handleProductsReady(customEvent);};const handleSortChangeEvent=e=>{const customEvent=e;logDebug(\"ProductSort\",\"product-sort-change event received\",customEvent.detail);handleSortChange(customEvent);};const handleFilterResetEvent=e=>{const customEvent=e;logDebug(\"ProductSort\",\"filter-reset for reset event received\",customEvent.detail);handleFilterReset(customEvent);};const handleFilterChangeEvent=e=>{const customEvent=e;logDebug(\"ProductSort\",\"product-filter-change event received\",customEvent.detail);handleFilter(customEvent);};const handleSearchChangeEvent=e=>{const customEvent=e;logDebug(\"ProductSort\",\"product-search-change event received\",customEvent.detail);handleSearch(customEvent);};document.addEventListener(\"filter-reset\",handleFilterResetEvent);document.addEventListener(\"data__products-ready\",handleProductsReadyEvent);document.addEventListener(\"product-sort-change\",handleSortChangeEvent);document.addEventListener(\"product-filter-change\",handleFilterChangeEvent);document.addEventListener(\"product-search-change\",handleSearchChangeEvent);// Cleanup\nreturn()=>{globalSortState.instances.delete(\"FC_CatalogDisplay\");document.removeEventListener(\"data__products-ready\",handleProductsReadyEvent);document.removeEventListener(\"product-sort-change\",handleSortChangeEvent);document.removeEventListener(\"product-filter-change\",handleFilterChangeEvent);document.removeEventListener(\"product-search-change\",handleSearchChangeEvent);document.removeEventListener(\"filter-reset\",handleFilterReset);logDebug(\"ProductSort\",\"Event listeners cleaned up\",null);};},[handleProductsReady,handleSortChange,handleFilter,handleSearch,handleFilterReset]);// At the top of your component, add this debug log\nReact.useEffect(()=>{if(products.length>0){// console.log(\"Products data structure:\", {\n//     totalProducts: products.length,\n//     sampleProduct: products[0]?.node,\n//     allFields: products[0]?.node\n//         ? Object.keys(products[0].node)\n//         : [],\n//     allProductTypes: products\n//         .slice(0, 10)\n//         .map((p) => p.node?.productType), // Log first 10 product types\n//     activeFilters: Object.entries(filters)\n//         .filter(([key, filter]: [string, any]) => filter.active)\n//         .reduce(\n//             (acc, [key, filter]: [string, any]) => ({\n//                 ...acc,\n//                 [key]: filter,\n//             }),\n//             {}\n//         ),\n// })\n// Log a specific check for the filter value\nif(filters.product_type?.active){const filterValues=filters.product_type.values;const matchingProducts=products.filter(p=>{const productType=p.node?.productType;if(!productType)return false;return filterValues.some(filterValue=>productType.toLowerCase().includes(filterValue.toLowerCase()));});// console.log(\"Filter match check:\", {\n//     filterValues: filterValues,\n//     totalProducts: products.length,\n//     matchingProductsCount: matchingProducts.length,\n//     sampleMatches: matchingProducts.slice(0, 3).map((p) => ({\n//         title: p.node?.title,\n//         productType: p.node?.productType,\n//     })),\n// })\n}}},[products]);// At the top of your component, add this debug log\n// React.useEffect(() => {\n//     if (products.length > 0) {\n//         console.log(\"\uD83D\uDD0D Debugging Product Structure:\", {\n//             firstProduct: products[0]?.node,\n//             hasSellingPlanGroups:\n//                 products[0]?.node?.sellingPlanGroups?.edges?.length > 0,\n//             variants: products[0]?.node?.variants?.edges?.map((edge) => ({\n//                 title: edge.node.title,\n//                 hasSellingPlans:\n//                     edge.node.sellingPlanAllocations?.edges?.length > 0,\n//                 sellingPlans: edge.node.sellingPlanAllocations?.edges,\n//             })),\n//         })\n//     }\n// }, [products])\n// Helper to get product details\nconst getProductDetails=React.useCallback(productId=>{logDebug(\"ProductSort\",\"Looking up product details\",{searchingForId:productId,fullId:`gid://shopify/Product/${productId}`,productsCount:products.length,usingShopXTools:typeof window!==\"undefined\"&&!!window.shopXtools});const fullId=`gid://shopify/Product/${productId}`;let product;// First try to find product in shopXtools\nif(typeof window!==\"undefined\"&&window.shopXtools?.products){product=window.shopXtools.products.find(({node})=>node.id===fullId)?.node;if(product){logDebug(\"ProductSort\",\"Found product in shopXtools\",{id:product.id,title:product.title});}}// Fall back to products state if not found in shopXtools\nif(!product){product=products.find(({node})=>node.id===fullId)?.node;}if(product){logDebug(\"ProductSort\",\"Raw product data found\",{id:product.id,title:product.title,rawProductType:product.productType,rawTags:product.tags,rawCollections:product.collections,fromShopXTools:!!window.shopXtools});return{id:product.id,title:product.title||\"\",price:product.priceRange?.minVariantPrice?.amount?parseFloat(product.priceRange.minVariantPrice.amount):0,productType:product.productType||\"\",tags:product.tags||[],compareAtPrice:product.compareAtPriceRange?.minVariantPrice?.amount?parseFloat(product.compareAtPriceRange.minVariantPrice.amount):0,isOnSale:product.compareAtPriceRange?.minVariantPrice?.amount?parseFloat(product.compareAtPriceRange.minVariantPrice.amount)>parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\"):false,collections:Array.isArray(product.collections)?product.collections.map(c=>c.title):[],options:product.options||[],variants:product.variants?.edges||[],sellingPlanGroups:product.sellingPlanGroups?.edges||[],hasProductLevelPlans:product.sellingPlanGroups?.edges?.length>0,hasVariantLevelPlans:product.variants?.edges?.some(edge=>edge.node.sellingPlanAllocations?.edges?.length>0)};}logDebug(\"ProductSort\",\"Product not found in any source\",{searchId:productId});return{id:\"\",title:\"\",price:0,productType:\"\",tags:[],compareAtPrice:0,isOnSale:false,collections:[],options:[],variants:[],sellingPlanGroups:[],hasProductLevelPlans:false,hasVariantLevelPlans:false};},[products]);// Helper function to perform the actual transition\nconst performTransition=newChildren=>{logDebug(\"ProductSort\",\"Performing transition\",{childrenCount:newChildren?newChildren.length:0});if(transitionTimeoutRef.current){clearTimeout(transitionTimeoutRef.current);}setIsTransitioning(true);// Directly set sorted children without fade out\nsetSortedChildren(newChildren);setTimeout(()=>{setIsTransitioning(false);setIsSettling(false);},200)// Fade in duration\n;};// Cleanup timeouts\nReact.useEffect(()=>{return()=>{if(transitionTimeoutRef.current){clearTimeout(transitionTimeoutRef.current);}if(settlingTimeoutRef.current){clearTimeout(settlingTimeoutRef.current);}};},[]);// Add a debug log to show which filters are active when filtering products\n// After the getProductDetails function, add this useEffect for debugging\n// React.useEffect(() => {\n//     console.log(\n//         \"Active filters:\",\n//         Object.entries(filters)\n//             .filter(([key, filter]: [string, any]) => filter.active)\n//             .reduce(\n//                 (acc, [key, filter]: [string, any]) => ({\n//                     ...acc,\n//                     [key]: filter,\n//                 }),\n//                 {}\n//             )\n//     )\n// }, [filters])\n// Add this function to check if a product matches the filters\nconst productMatchesFilters=React.useCallback(product=>{/**\n             * Determines if a product matches all active filters\n             * Returns details about which filters matched or failed\n             */const filterResults={};// Log active filters at the beginning\nconst activeFilters={search:searchConfig.active?{term:searchConfig.term,fields:searchConfig.fields}:null,collection:filters.collection?.active?{values:filters.collection.values}:null,product_type:filters.product_type?.active?{values:filters.product_type.values}:null,product_tag:filters.product_tag?.active?{values:filters.product_tag.values}:null,price:filters.price?.active?{values:filters.price.values}:null,on_sale:filters.on_sale?.active||null,in_stock:filters.in_stock?.active||null,bundle:filters.bundle?.active||null,subscription:filters.subscription?.active||null,variant:filters.variant?.active?{values:filters.variant.values}:null,discount_amount:filters.discount_amount?.active?{values:filters.discount_amount.values}:null,discount_percent:filters.discount_percent?.active?{values:filters.discount_percent.values}:null};// console.log(\"Active filters (line 1128):\", activeFilters)\n// Only log if we have any active filters\nif(Object.values(activeFilters).some(v=>v!==null)){// console.log(\n//     `\uD83D\uDD0D FILTERING PRODUCT \"${product.title}\" with active filters:`,\n//     Object.fromEntries(\n//         Object.entries(activeFilters).filter(\n//             ([_, v]) => v !== null\n//         )\n//     )\n// )\n}// ---- SEARCH TERM FILTER ----\nif(searchConfig.active&&searchConfig.term&&props.Search?.enableSearch){const searchTerm=searchConfig.term.toLowerCase();let matches=false;// Add debug log for search filtering\n// console.log(\"\uD83D\uDD0D FILTERING PRODUCT by search term\", {\n//     productTitle: product.title,\n//     searchTerm: searchTerm,\n//     searchFields: searchConfig.fields,\n//     searchConfig: searchConfig\n// })\n// Map search fields to shopX product structure\nfor(const field of searchConfig.fields){// console.log(`\uD83D\uDD0D Checking search field:`, {\n//     field,\n//     searchTerm,\n//     productTitle: product.title\n// });\nswitch(field){case\"variants\":// Search through variant values with proper null checks\nif(product?.variants?.edges&&Array.isArray(product.variants.edges))try{// First check variant colors\nconst variantMatches=product.variants.edges.some(edge=>{if(!edge?.node?.selectedOptions||!Array.isArray(edge.node.selectedOptions)){return false;}return edge.node.selectedOptions.some(option=>{return option?.value&&typeof option.value===\"string\"&&option.value.toLowerCase().includes(searchTerm);});});// Search all custom.fc_* metafields for the search term\nlet metafieldMatches=false;if(includeMetafields&&product?.metafields&&Array.isArray(product.metafields)){metafieldMatches=product.metafields.some(mf=>{if(mf&&mf.namespace===\"custom\"&&mf.key.startsWith(\"fc_\")&&typeof mf.value===\"string\"){let values=[];try{const parsed=JSON.parse(mf.value);if(Array.isArray(parsed)){values=parsed.map(v=>v.toLowerCase());}else if(typeof parsed===\"string\"){values=[parsed.toLowerCase()];}}catch{values=[mf.value.toLowerCase()];}return values.some(val=>val.includes(searchTerm));}return false;});}matches=matches||variantMatches||metafieldMatches;if(matches){// console.log(`\uD83C\uDFAF Final match found for \"${product.title}\"`, {\n//     variantMatches,\n//     metafieldMatches\n// })\n}}catch(error){console.error(\"Error searching variants and custom color:\",error);return false;}break;case\"title\":// Product title is directly accessible on the product object\nif(product.title){const titleMatches=product.title.toLowerCase().includes(searchTerm);if(titleMatches){// Only log matches to reduce console noise\nconsole.log(`\uD83C\uDFAF Title match: \"${product.title}\" includes \"${searchTerm}\"`);}matches=matches||titleMatches;}else{// console.log(\n//     `\u26A0\uFE0F Product has no title property:`,\n//     product\n// )\n}break;case\"productType\":// Product type is under productType\nif(product.productType){const typeMatches=product.productType.toLowerCase().includes(searchTerm);if(typeMatches){// console.log(\n//     `\uD83C\uDFAF Product Type match: \"${product.productType}\" includes \"${searchTerm}\"`\n// )\n}matches=matches||typeMatches;}break;case\"tags\":// Tags are in an array\nif(Array.isArray(product.tags)){const tagMatches=product.tags.some(tag=>tag&&tag.toLowerCase().includes(searchTerm));if(tagMatches){// console.log(\n//     `\uD83C\uDFAF Tag match: \"${product.tags.join(\", \")}\" includes \"${searchTerm}\"`\n// )\n}matches=matches||tagMatches;}break;case\"collections\":// Collections are in an array\nif(Array.isArray(product.collections)){const collectionMatches=product.collections.some(collection=>{const collectionTitle=collection?.title||collection;return typeof collectionTitle===\"string\"&&collectionTitle.toLowerCase().includes(searchTerm);});if(collectionMatches){// console.log(\n//     `\uD83C\uDFAF Collection match: \"${product.collections\n//         .map((c) => c?.title || c)\n//         .filter(Boolean)\n//         .join(\n//             \", \"\n//         )}\" includes \"${searchTerm}\"`\n// )\n}matches=matches||collectionMatches;}break;case\"vendor\":// Vendor is under product.vendor\nif(product.vendor){const vendorMatches=product.vendor.toLowerCase().includes(searchTerm);if(vendorMatches){// console.log(\n//     `\uD83C\uDFAF Vendor match: \"${product.vendor}\" includes \"${searchTerm}\"`\n// )\n}matches=matches||vendorMatches;}break;}// If we found a match, no need to check other fields\nif(matches)break;}filterResults.search={active:true,term:searchConfig.term,matches};// If search is active but we don't match, return early\nif(!matches){return{matches:false,filterResults};}}// ----- COLLECTION FILTER -----\nif(filters.collection?.active&&filters.collection.values?.length>0){const collectionValues=filters.collection.values;let matches=false;// Get the collection titles from the new nested structure\nconst productCollections=product.collections.map(collection=>collection.node?.title||collection.node?.handle||collection);// Use OR logic (some) for collections if not scoped to collections\n// Use AND logic (every) only if scoped to collections\nif(props.display===\"Collection\"){matches=collectionValues.every(collectionValue=>productCollections.includes(collectionValue));}else{matches=collectionValues.some(collectionValue=>productCollections.includes(collectionValue));}filterResults.collection={active:true,values:collectionValues,matches};if(!matches){return{matches:false,filterResults};}}// ----- PRODUCT TYPE FILTER -----\nif(filters.product_type?.active&&filters.product_type.values?.length>0){const productTypeValues=filters.product_type.values;let matches=false;if(product.productType){// Use OR logic (some) for product types if not scoped to product types\n// Use AND logic (every) only if scoped to product types\nif(props.display===\"Product Type\"){matches=productTypeValues.every(type=>product.productType.toLowerCase().includes(type.toLowerCase()));}else{matches=productTypeValues.some(type=>product.productType.toLowerCase().includes(type.toLowerCase()));}}filterResults.product_type={active:true,values:productTypeValues,matches};if(!matches){return{matches:false,filterResults};}}// ----- PRODUCT TAG FILTER -----\nif(filters.product_tag?.active&&filters.product_tag.values?.length>0){const tagValues=filters.product_tag.values;let matches=false;if(Array.isArray(product.tags)){// Use OR logic (some) for tags if not scoped to tags\n// Use AND logic (every) only if scoped to tags\nif(props.display===\"Product Tag\"){matches=tagValues.every(tagValue=>product.tags.some(tag=>tag.toLowerCase().includes(tagValue.toLowerCase())));}else{matches=tagValues.some(tagValue=>product.tags.some(tag=>tag.toLowerCase().includes(tagValue.toLowerCase())));}}filterResults.product_tag={active:true,values:tagValues,matches};if(!matches){return{matches:false,filterResults};}}// ----- PRICE FILTER -----\nif(filters.price?.active&&filters.price.values?.length>0){const productPrice=parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\");let matches=false;// Check if product matches any of the active price ranges\nmatches=filters.price.values.some(range=>{if(range.min===null){// Handle \"Under\" price range\nreturn productPrice<=range.max;}else if(range.max===null){// Handle \"Over\" price range\nreturn productPrice>=range.min;}else{// Handle regular price range\nreturn productPrice>=range.min&&productPrice<=range.max;}});filterResults.price={active:true,values:filters.price.values,productPrice,matches};if(!matches){return{matches:false,filterResults};}}// ----- DISCOUNT FILTER -----\nif(filters.discount_amount?.active&&filters.discount_amount.values?.length>0){const productPrice=parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\");const compareAtPrice=parseFloat(product.compareAtPriceRange?.minVariantPrice?.amount||\"0\");const discountAmount=compareAtPrice>productPrice?compareAtPrice-productPrice:0;let matches=false;// console.log(\"\uD83D\uDD0D Checking discount amount:\", {\n//     productPrice,\n//     compareAtPrice,\n//     discountAmount,\n//     ranges: filters.discount_amount.values,\n// })\n// Check if product matches any of the active discount ranges\nmatches=filters.discount_amount.values.some(range=>{if(range.min===null){// Handle \"Under\" discount range\nreturn discountAmount<=range.max;}else if(range.max===null){// Handle \"Over\" discount range\nreturn discountAmount>=range.min;}else{// Handle regular discount range\nreturn discountAmount>=range.min&&discountAmount<=range.max;}});filterResults.discount_amount={active:true,values:filters.discount_amount.values,discountAmount,matches};if(!matches){return{matches:false,filterResults};}}if(filters.discount_percent?.active&&filters.discount_percent.values?.length>0){const productPrice=parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\");const compareAtPrice=parseFloat(product.compareAtPriceRange?.minVariantPrice?.amount||\"0\");const discountPercent=compareAtPrice>productPrice?(compareAtPrice-productPrice)/compareAtPrice*100:0;let matches=false;// console.log(\"\uD83D\uDD0D Checking discount percent:\", {\n//     productPrice,\n//     compareAtPrice,\n//     discountPercent,\n//     ranges: filters.discount_percent.values,\n// })\n// Check if product matches any of the active discount percentage ranges\nmatches=filters.discount_percent.values.some(range=>{if(range.min===null){// Handle \"Under\" discount percentage range\nreturn discountPercent<=range.max;}else if(range.max===null){// Handle \"Over\" discount percentage range\nreturn discountPercent>=range.min;}else{// Handle regular discount percentage range\nreturn discountPercent>=range.min&&discountPercent<=range.max;}});filterResults.discount_percent={active:true,values:filters.discount_percent.values,discountPercent,matches};if(!matches){return{matches:false,filterResults};}}// ----- DISCOUNT FILTER -----\nif(filters.discount_amount?.active&&filters.discount_amount.values?.length>0){const productPrice=parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\");const compareAtPrice=parseFloat(product.compareAtPriceRange?.minVariantPrice?.amount||\"0\");const discountAmount=compareAtPrice>productPrice?compareAtPrice-productPrice:0;let matches=false;// console.log(\"\uD83D\uDD0D Checking discount amount:\", {\n//     productPrice,\n//     compareAtPrice,\n//     discountAmount,\n//     ranges: filters.discount_amount.values,\n// })\n// Check if product matches any of the active discount ranges\nmatches=filters.discount_amount.values.some(range=>{if(range.min===null){// Handle \"Under\" discount range\nreturn discountAmount<=range.max;}else if(range.max===null){// Handle \"Over\" discount range\nreturn discountAmount>=range.min;}else{// Handle regular discount range\nreturn discountAmount>=range.min&&discountAmount<=range.max;}});filterResults.discount_amount={active:true,values:filters.discount_amount.values,discountAmount,matches};if(!matches){return{matches:false,filterResults};}}if(filters.discount_percent?.active&&filters.discount_percent.values?.length>0){const productPrice=parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\");const compareAtPrice=parseFloat(product.compareAtPriceRange?.minVariantPrice?.amount||\"0\");const discountPercent=compareAtPrice>productPrice?(compareAtPrice-productPrice)/compareAtPrice*100:0;let matches=false;// console.log(\"\uD83D\uDD0D Checking discount percent:\", {\n//     productPrice,\n//     compareAtPrice,\n//     discountPercent,\n//     ranges: filters.discount_percent.values,\n// })\n// Check if product matches any of the active discount percentage ranges\nmatches=filters.discount_percent.values.some(range=>{if(range.min===null){// Handle \"Under\" discount percentage range\nreturn discountPercent<=range.max;}else if(range.max===null){// Handle \"Over\" discount percentage range\nreturn discountPercent>=range.min;}else{// Handle regular discount percentage range\nreturn discountPercent>=range.min&&discountPercent<=range.max;}});filterResults.discount_percent={active:true,values:filters.discount_percent.values,discountPercent,matches};if(!matches){return{matches:false,filterResults};}}// ----- DISCOUNT FILTER -----\nif(filters.discount_amount?.active&&filters.discount_amount.values?.length>0){const productPrice=parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\");const compareAtPrice=parseFloat(product.compareAtPriceRange?.minVariantPrice?.amount||\"0\");const discountAmount=compareAtPrice>productPrice?compareAtPrice-productPrice:0;let matches=false;// console.log(\"\uD83D\uDD0D Checking discount amount:\", {\n//     productPrice,\n//     compareAtPrice,\n//     discountAmount,\n//     ranges: filters.discount_amount.values,\n// })\n// Check if product matches any of the active discount ranges\nmatches=filters.discount_amount.values.some(range=>{if(range.min===null){// Handle \"Under\" discount range\nreturn discountAmount<=range.max;}else if(range.max===null){// Handle \"Over\" discount range\nreturn discountAmount>=range.min;}else{// Handle regular discount range\nreturn discountAmount>=range.min&&discountAmount<=range.max;}});filterResults.discount_amount={active:true,values:filters.discount_amount.values,discountAmount,matches};if(!matches){return{matches:false,filterResults};}}if(filters.discount_percent?.active&&filters.discount_percent.values?.length>0){const productPrice=parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\");const compareAtPrice=parseFloat(product.compareAtPriceRange?.minVariantPrice?.amount||\"0\");const discountPercent=compareAtPrice>productPrice?(compareAtPrice-productPrice)/compareAtPrice*100:0;let matches=false;// console.log(\"\uD83D\uDD0D Checking discount percent:\", {\n//     productPrice,\n//     compareAtPrice,\n//     discountPercent,\n//     ranges: filters.discount_percent.values,\n// })\n// Check if product matches any of the active discount percentage ranges\nmatches=filters.discount_percent.values.some(range=>{if(range.min===null){// Handle \"Under\" discount percentage range\nreturn discountPercent<=range.max;}else if(range.max===null){// Handle \"Over\" discount percentage range\nreturn discountPercent>=range.min;}else{// Handle regular discount percentage range\nreturn discountPercent>=range.min&&discountPercent<=range.max;}});filterResults.discount_percent={active:true,values:filters.discount_percent.values,discountPercent,matches};if(!matches){return{matches:false,filterResults};}}// ----- ON SALE FILTER -----\nif(filters.on_sale?.active){let matches=false;if(product.compareAtPriceRange?.minVariantPrice?.amount&&product.priceRange?.minVariantPrice?.amount){const comparePrice=parseFloat(product.compareAtPriceRange.minVariantPrice.amount);const price=parseFloat(product.priceRange.minVariantPrice.amount);matches=comparePrice>price;}filterResults.on_sale={active:true,matches};if(!matches){return{matches:false,filterResults};}}// ----- IN STOCK FILTER -----\nif(filters.in_stock?.active){let matches=false;// Check if any variant is available for sale\nif(product.variants?.edges?.some(edge=>edge.node.availableForSale)){matches=true;}filterResults.in_stock={active:true,matches};if(!matches){return{matches:false,filterResults};}}// ----- SUBSCRIPTION FILTER -----\nif(filters.subscription?.active){let matches=false;const sellingPlanGroups=product.sellingPlanGroups?.edges||[];// Check if the product has subscription plans\nif(sellingPlanGroups&&product.sellingPlanGroups?.edges?.length>0){matches=true;}// Check for variant-level subscription plans\nif(product.variants?.edges?.some(edge=>edge.node.sellingPlanAllocations?.edges?.length>0)){matches=true;}filterResults.subscription={active:true,matches};// console.log(\n//     \"filterResults.subscription\",\n//     filterResults.subscription\n// )\nif(!matches){return{matches:false,filterResults};}}// ----- VARIANT FILTER -----\nif(filters.variant?.active&&filters.variant.values?.length>0){const variantFilters=filters.variant.values;let matches=false;// Check if any variant matches the filter criteria\nif(product.variants?.edges){// Add detailed logging for variant filtering\n// console.log(\n//     `\uD83D\uDD0D VARIANT FILTERING: Checking product \"${product.title}\" variants against filter:`,\n//     {\n//         filterCriteria: variantFilters.map((filter) => ({\n//             name: filter.name,\n//             value: filter.value,\n//         })),\n//         hasVariants: product.variants.edges.length > 0,\n//         variantCount: product.variants.edges.length,\n//     }\n// )\n// First check variant options\nmatches=product.variants.edges.some(edge=>{const variant=edge.node;if(!variant.selectedOptions){// console.log(\n//     `\u26A0\uFE0F Variant has no selectedOptions:`,\n//     variant\n// )\nreturn false;}// Optional stock filter for variant match\nconst shouldCheckStock=filters.variant?.variantStockFilter===\"in_stock\";const isAvailable=variant.availableForSale;if(shouldCheckStock&&!isAvailable){return false// Skip this variant if it's not available\n;}// Log variant options for debugging\n// console.log(`\uD83D\uDC49 Checking variant:`, {\n//     variantOptions: variant.selectedOptions.map(\n//         (opt) => `${opt.name}: ${opt.value}`\n//     ),\n//     filterValues: variantFilters.map(\n//         (f) => `${f.name}: ${f.value}`\n//     ),\n// })\n// Group filters by variant name (e.g., Color, Size)\n// For OR logic within same variant type, we need to group filters by name\nconst variantFiltersByName={};variantFilters.forEach(filter=>{if(!variantFiltersByName[filter.name]){variantFiltersByName[filter.name]=[];}variantFiltersByName[filter.name].push(filter.value);});// Log grouped filters\n// console.log(\n//     `\uD83D\uDD0D Grouped variant filters:`,\n//     variantFiltersByName\n// )\n// A variant matches if it satisfies at least one value from each variant type\n// (AND between different variant types, OR between values of same type)\nconst matchesByType=Object.entries(variantFiltersByName).map(([name,values])=>{// Find the option that matches the filter name\nconst matchingOption=variant.selectedOptions.find(option=>option.name.toLowerCase()===name.toLowerCase());if(!matchingOption){// console.log(\n//     `\u274C No matching option found for ${name}`\n// )\nreturn false;}// Check if the option value matches any of the filter values (case-insensitive)\nconst valueMatches=values.some(value=>matchingOption.value.toLowerCase()===value.toLowerCase());// console.log(\n//     `${valueMatches ? \"\u2705\" : \"\u274C\"} ${name} = ${matchingOption.value}`,\n//     {\n//         acceptableValues: values,\n//         matches: valueMatches,\n//     }\n// )\nreturn valueMatches;});// True if ALL filter types have at least one matching value\nconst allTypesMatch=matchesByType.every(matches=>matches);// console.log(\n//     `${allTypesMatch ? \"\u2705\" : \"\u274C\"} Overall match result: ${allTypesMatch}`\n// )\nreturn allTypesMatch;});// If no variant matches and we're looking for a color, check custom metadata\nif(includeMetafields&&product.metafields&&Array.isArray(product.metafields)){variantFilters.forEach(filter=>{const metafieldKey=`fc_${filter.name.toLowerCase()}`;const metafield=product.metafields.find(mf=>mf&&mf.namespace===\"custom\"&&mf.key===metafieldKey&&typeof mf.value===\"string\");if(metafield){let values=[];try{// Try to parse as JSON array\nconst parsed=JSON.parse(metafield.value);if(Array.isArray(parsed)){values=parsed.map(v=>v.toLowerCase());}else if(typeof parsed===\"string\"){values=[parsed.toLowerCase()];}}catch{// If not JSON, treat as a single string value\nvalues=[metafield.value.toLowerCase()];}if(values.length>0&&filter.value){if(values.includes(filter.value.toLowerCase())){matches=true;}}}});}}filterResults.variant={active:true,values:variantFilters,matches};if(!matches){return{matches:false,filterResults};}}// Log final result\nconsole.log(`\uD83D\uDD0D FILTER RESULT for \"${product.title}\": ${JSON.stringify({matches:true,filterResults})}`);// All tests passed\nreturn{matches:true,filterResults};},[filters,searchConfig]);// Add this after the handleFilter useCallback\nReact.useEffect(()=>{// console.log(\"\uD83D\uDEA8 Search state \uD83D\uDEA8\", {\n//     sortedChildren: sortedChildren,\n//     sortedChildrenCount: sortedChildren ? sortedChildren.length : 0,\n//     searchConfig: searchConfig,\n//     paginationType: props.Pagination.type,\n//     enableSearch: props.Search.enableSearch,\n//     initialSearchState: props.Search.initialSearchState,\n// })\n// Dispatch product-search-results event when filtered products change\nif(sortedChildren&&searchConfig.active||!searchConfig.active){const shouldShowCustomInitial=props.Search?.enableSearch&&props.Search?.initialSearchState===\"custom\"&&!searchConfig.term;const searchResultsEvent=new CustomEvent(\"product-search-results\",{detail:{count:shouldShowCustomInitial?0:sortedChildren?sortedChildren.length:products.length,term:searchConfig.term||\"\"}});document.dispatchEvent(searchResultsEvent);//console.log(\"product-search-results dispatched\", searchResultsEvent);\nconst hasMoreLoadMore=sortedChildren?.length>0;setHasMore(hasMoreLoadMore);if(props.Pagination.type===\"load_more\"){const hasMoreItemsEvent=new CustomEvent(\"hide-loadmore-button\",{detail:{hasMoreItems:hasMoreLoadMore}});document.dispatchEvent(hasMoreItemsEvent);console.log(\"hide-loadmore-button dispatched\",hasMoreItemsEvent);}if(props.Pagination.type===\"next_prev\"){const updateNextPrevButtonsEvent=new CustomEvent(\"update_next_prev_buttons\",{detail:{hasMoreItems:hasMoreLoadMore,type:props.Pagination?.type,currentPage}});document.dispatchEvent(updateNextPrevButtonsEvent);//console.log(\"update_next_prev_buttons dispatched\", updateNextPrevButtonsEvent)\n}}},[products,sortedChildren,searchConfig.active]);React.useEffect(()=>{const hasMoreLoadMore=sortedChildren?.length>0;setHasMore(hasMoreLoadMore);if(props.Pagination.type===\"load_more\"&&searchConfig.active&&!sortedChildren){const hasMoreItemsEvent=new CustomEvent(\"hide-loadmore-button\",{detail:{hasMoreItems:hasMoreLoadMore}});document.dispatchEvent(hasMoreItemsEvent);//console.log(\"hide-loadmore-button dispatched\", hasMoreItemsEvent)\n}if(props.Pagination.type===\"next_prev\"&&searchConfig.active&&!sortedChildren){const updateNextPrevButtonsEvent=new CustomEvent(\"update_next_prev_buttons\",{detail:{hasMoreItems:hasMoreLoadMore,type:props.Pagination?.type,currentPage}});document.dispatchEvent(updateNextPrevButtonsEvent);//console.log(\"update_next_prev_buttons dispatched\", updateNextPrevButtonsEvent)\n}},[products,sortedChildren,searchConfig.active,props.Pagination.type]);// Add this after the URL parameters useEffect\nReact.useEffect(()=>{// Check if we're in a browser environment\nif(typeof window===\"undefined\")return;// Check for shopXtools and products\nconst hasShopXTools=!!window.shopXtools;const products=window.shopXtools?.products;// Log initial state\n// console.log(\"\uD83D\uDEA8 Checking for initial shopXtools products \uD83D\uDEA8\", {\n//     hasShopXTools,\n//     hasProducts: !!products,\n//     productsCount: products?.length || 0,\n// })\n// Set products if available\nif(products){// console.log(\"\uD83D\uDEA8 Setting initial products from shopXtools \uD83D\uDEA8\", {\n//     count: products.length,\n//     sample: products[0]?.node,\n// })\nsetProducts(products);}},[])// Only run on mount\n;if(!Collection?.[0]){logDebug(\"ProductSort\",\"No collection instance found\",null);return /*#__PURE__*/_jsx(\"div\",{style:{height:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",color:\"#666\",fontSize:\"14px\"},children:\"Connect instance\"});}const collectionInstance=Collection[0];const emptyStateInstance=props.EmptyState?.[0];const sizedInstance=/*#__PURE__*/React.cloneElement(collectionInstance,{style:{...collectionInstance.props?.style||{},width:\"100%\",height:\"100%\"}});// Update the layout styling logic\nlet layoutStyle={};if(props.layout){const layout=props.layout;switch(layout.type){case\"stack\":const isVertical=layout.direction===\"vertical\";layoutStyle={display:\"flex\",flexDirection:isVertical?\"column\":\"row\",flexWrap:layout.wrap?\"wrap\":\"nowrap\",alignItems:isVertical?layout.align:layout.alignH,justifyContent:layout.distribute,gap:layout.gap,padding:layout.paddingPerSide?`${layout.paddingTop}px ${layout.paddingRight}px ${layout.paddingBottom}px ${layout.paddingLeft}px`:`${layout.padding}px`,width:\"100%\",\"& > *\":{minWidth:layout.stackMinWidth,flexGrow:1,flexShrink:1,flexBasis:0}};break;case\"grid\":let gridTemplateColumns=\"\";if(layout.columns===\"auto\"){// Combine auto-fit with a calculated minmax to respect both gridWidth and maxColumns.\n// The min value ensures columns are at least gridWidth, but also effectively caps\n// the column count at maxColumns by calculating the width required for that many columns.\ngridTemplateColumns=`repeat(auto-fit, minmax(max(${layout.gridWidth}px, calc((100% - ${layout.gap*(layout.maxColumns-1)}px) / ${layout.maxColumns})), 1fr))`;}else{gridTemplateColumns=`repeat(${layout.columnCount}, 1fr)`;}layoutStyle={display:\"grid\",gridTemplateColumns,justifyItems:layout.gridAlign,gap:layout.gap,padding:layout.paddingPerSide?`${layout.paddingTop}px ${layout.paddingRight}px ${layout.paddingBottom}px ${layout.paddingLeft}px`:`${layout.padding}px`,width:\"100%\"};break;}}// Create the styled instance with layout\nconst styledInstance=/*#__PURE__*/React.cloneElement(sizedInstance,{style:{...sizedInstance.props.style,...layoutStyle}});if(RenderTarget.current()===RenderTarget.canvas){return styledInstance;}const[isBackNavigation,setIsBackNavigation]=React.useState(false);React.useEffect(()=>{if(typeof window===\"undefined\")return;const handleUrlChange=event=>{// console.log(\"popstate\", event)\nconst url=new URL(window.location.href);const urlParams=new URLSearchParams(url.search);// Handle page parameter\nconst pageParam=urlParams.get(\"page\");const newPage=pageParam?parseInt(pageParam,10):1;//console.log(\"[CMS] Checking page change:\", { currentPage, newPage })\nif(newPage!==currentPage){//console.log(\"[CMS] Updating to page:\", newPage)\nsetCurrentPage(newPage);setSortedChildren(null)// Reset sorted children to trigger re-render\n;}setIsLoading(true);logDebug(\"ProductSort\",\"URL changed\",{url:url.toString(),search:url.search,eventType:event?.type||\"direct\",currentPage:currentPage,newPage:newPage});if(event.type===\"popstate\"){//console.log(\"Reloading the page\")\nwindow.location.reload();}// Set loading to false after a short delay to prevent flash\nsetTimeout(()=>{setIsLoading(false);setIsBackNavigation(false);},150);};// Run initial check\nhandleUrlChange({});// Listen for both popstate and pagination events\nwindow.addEventListener(\"popstate\",handleUrlChange);document.addEventListener(\"product-pagination-change\",handleUrlChange);return()=>{// window.removeEventListener(\"popstate\", handleUrlChange)\ndocument.removeEventListener(\"product-pagination-change\",handleUrlChange);};},[currentPage]);try{logDebug(\"ProductSort\",\"Rendering collection\",{hasCollection:!!Collection[0],productsCount:products.length,sortedChildrenCount:sortedChildren?sortedChildren.length:0,isBackNavigation,isLoading});return /*#__PURE__*/React.cloneElement(styledInstance,{...styledInstance.props,style:{...styledInstance.props.style,opacity:isLoading?0:1,transition:\"opacity 0.2s ease-in-out\",visibility:isLoading?\"hidden\":\"visible\"},children:/*#__PURE__*/React.cloneElement(styledInstance.props.children,{...styledInstance.props.children.props,children:/*#__PURE__*/React.cloneElement(styledInstance.props.children.props.children,{...styledInstance.props.children.props.children.props,children:collection=>{logDebug(\"ProductSort\",\"Collection render function called\",{collectionSize:collection?.length||0});const originalRender=styledInstance.props.children.props.children.props.children(collection);if(!originalRender?.props?.children){logDebug(\"ProductSort\",\"No children in original render\",null);return originalRender;}if(props.Search?.enableSearch&&props.Search?.initialSearchState===\"custom\"&&!searchConfig.term&&props.CustomInitialState?.[0]){// console.log(\n//     \"Rendering custom initial state:\",\n//     {\n//         enableSearch: props.Search?.enableSearch,\n//         initialSearchState: props.Search?.initialSearchState,\n//         searchConfig: searchConfig,\n//     }\n// )\nconst styledCustomInitial=/*#__PURE__*/React.cloneElement(props.CustomInitialState[0],{style:{...props.CustomInitialState[0].props?.style||{},width:\"100%\",height:\"100%\",maxWidth:\"100%\",transform:\"none\"}});// Create a wrapper that completely overrides any grid styles\nconst CustomInitialWrapper=()=>/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",padding:props.layout?.padding?`${props.layout.padding}px`:\"0px\",// Override any grid properties\n    gridColumn:\"1 / -1\",gridRow:\"1 / -1\",// Ensure it spans the full container\n    position:\"relative\",minWidth:\"100%\",maxWidth:\"100%\"},children:styledCustomInitial});return{...originalRender,props:{...originalRender.props,children:/*#__PURE__*/_jsx(CustomInitialWrapper,{})}};}if(!sortedChildren&&products.length>0){// console.log(\n//     \"\uD83D\uDEA8\uD83D\uDEA8\uD83D\uDEA8 STARTING FILTERING PROCESS \uD83D\uDEA8\uD83D\uDEA8\uD83D\uDEA8\",\n//     {\n//         productsLength: products.length,\n//         hasShopXTools:\n//             typeof window !== \"undefined\" &&\n//             !!window.shopXtools,\n//         activeFilters: Object.entries(filters)\n//             .filter(\n//                 ([key, filter]: [\n//                     string,\n//                     any,\n//                 ]) => filter.active\n//             )\n//             .reduce(\n//                 (\n//                     acc,\n//                     [key, filter]: [string, any]\n//                 ) => ({\n//                     ...acc,\n//                     [key]: filter,\n//                 }),\n//                 {}\n//             ),\n//         firstProduct: products[0]?.node,\n//     }\n// )\n// First filter all shopXtools products\nconst filteredShopXProducts=products.filter(({node})=>{// Add debug log for products being filtered\n// console.log(\n//     \"\uD83D\uDD0D Checking product for filtering:\",\n//     {\n//         title:\n//             node?.title || \"No title\",\n//         hasNode: !!node,\n//         nodeType: node\n//             ? typeof node\n//             : \"undefined\",\n//         productType:\n//             node?.productType ||\n//             \"No product type\",\n//         filterActive:\n//             searchConfig.active,\n//     }\n// )\n// Ensure node exists\nif(!node){// console.log(\n//     \"\u26A0\uFE0F No node found for product, skipping\"\n// )\nreturn false;}const matches=productMatchesFilters(node);// console.log(\n//     \"\uD83D\uDD0D Product filter result:\",\n//     {\n//         title: node.title,\n//         productType: node.productType,\n//         matches: matches.matches,\n//         searchActive:\n//             searchConfig.active,\n//         searchTerm: searchConfig.term,\n//     }\n// )\nreturn matches.matches;});// console.log(\n//     \"\uD83D\uDD0D Filtered shopX products results:\",\n//     {\n//         totalBefore: products.length,\n//         totalAfter:\n//             filteredShopXProducts.length,\n//         firstProduct: filteredShopXProducts[0]\n//             ?.node\n//             ? {\n//                   title: filteredShopXProducts[0]\n//                       .node.title,\n//                   productType:\n//                       filteredShopXProducts[0]\n//                           .node.productType,\n//               }\n//             : null,\n//         activeFilters: Object.entries(filters)\n//             .filter(\n//                 ([key, filter]: [\n//                     string,\n//                     any,\n//                 ]) => filter.active\n//             )\n//             .reduce(\n//                 (\n//                     acc,\n//                     [key, filter]: [string, any]\n//                 ) => ({\n//                     ...acc,\n//                     [key]: filter,\n//                 }),\n//                 {}\n//             ),\n//         searchActive: searchConfig.active,\n//         searchTerm: searchConfig.term,\n//     }\n// )\n// Add additional debugging if no products match\n// if (\n//     filteredShopXProducts.length === 0 &&\n//     products.length > 0\n// ) {\n//     console.log(\n//         \"\u26A0\uFE0F NO PRODUCTS MATCHED FILTERS! Active filters:\",\n//         {\n//             searchConfig: searchConfig.active\n//                 ? searchConfig\n//                 : null,\n//             otherFilters: Object.entries(\n//                 filters\n//             )\n//                 .filter(\n//                     ([key, filter]: [\n//                         string,\n//                         any,\n//                     ]) => filter.active\n//                 )\n//                 .reduce(\n//                     (\n//                         acc,\n//                         [key, filter]: [\n//                             string,\n//                             any,\n//                         ]\n//                     ) => ({\n//                         ...acc,\n//                         [key]: filter,\n//                     }),\n//                     {}\n//                 ),\n//         }\n//     )\n//     // Log some sample products to help diagnose\n//     console.log(\n//         \"Sample products that didn't match:\",\n//         products.slice(0, 3).map((p) => ({\n//             title: p.node?.title,\n//             productType: p.node?.productType,\n//             tags: p.node?.tags?.slice(0, 3),\n//             collections: p.node?.collections\n//                 ?.map((c) => c.title || c)\n//                 .slice(0, 3),\n//         }))\n//     )\n// }\nconst filteredForPage=pageType===\"favorites\"?filteredShopXProducts.filter(({node})=>{const productId=findDeep13DigitNumber(node);return productId&&favorites.includes(productId);}):filteredShopXProducts;// If no items match, render the empty state directly\nif(filteredForPage.length===0){if(emptyStateInstance){const styledEmptyState=/*#__PURE__*/React.cloneElement(emptyStateInstance,{style:{...emptyStateInstance.props?.style||{},width:\"100%\",height:\"100%\",maxWidth:\"100%\",transform:\"none\"}});// Create a wrapper that completely overrides any grid styles\nconst EmptyStateWrapper=()=>/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",padding:props.layout?.padding?`${props.layout.padding}px`:\"0px\",// Override any grid properties\n    gridColumn:\"1 / -1\",gridRow:\"1 / -1\",// Ensure it spans the full container\n    position:\"relative\",minWidth:\"100%\",maxWidth:\"100%\"},children:styledEmptyState});// Return the wrapper component directly\nreturn{...originalRender,props:{...originalRender.props,style:{...originalRender.props.style,// Override grid properties at the container level\ndisplay:\"flex\",gridTemplateColumns:\"none\",gridAutoColumns:\"none\",gridTemplateRows:\"none\",gap:0},children:/*#__PURE__*/_jsx(EmptyStateWrapper,{})}};}return null;}// Then map the filtered products to collection items\nconst items=originalRender.props.children.map(child=>{const item=collection.find(collectionItem=>collectionItem.id===child.key);const productId=item?findDeep13DigitNumber(item):null;// Find the product in our filtered shopX products\nconst fullId=`gid://shopify/Product/${productId}`;const matchingProduct=filteredForPage.find(({node})=>node.id===fullId);// Only include items that exist in our filtered products\nif(!matchingProduct){logDebug(\"ProductSort\",\"Product filtered out\",{id:fullId,productId});return null;}const details={id:matchingProduct.node.id,title:matchingProduct.node.title||\"\",price:matchingProduct.node.priceRange?.minVariantPrice?.amount?parseFloat(matchingProduct.node.priceRange.minVariantPrice.amount):0,productType:matchingProduct.node.productType||\"\",tags:matchingProduct.node.tags||[],compareAtPrice:matchingProduct.node.compareAtPriceRange?.minVariantPrice?.amount?parseFloat(matchingProduct.node.compareAtPriceRange.minVariantPrice.amount):0,collections:Array.isArray(matchingProduct.node.collections)?matchingProduct.node.collections.map(c=>c.title):[]};return{child,productId:productId||\"0\",price:details.price,title:details.title,originalIndex:originalRender.props.children.indexOf(child),details};}).filter(Boolean)// Remove null items\n;logDebug(\"ProductSort\",\"Final filtered items\",{totalProducts:products.length,filteredForPage:filteredForPage.length,finalItems:items.length,finalItemsList:items,sample:items[0]?{title:items[0].title,productType:items[0].details.productType}:null});// Use React.memo for components that do not change\nconst OptimizedChild=/*#__PURE__*/React.memo(({child,...props})=>{return /*#__PURE__*/React.cloneElement(child,props);});// Ensure debouncing is applied effectively\nconst debouncedUpdateSort=React.useCallback(debounce(newSortConfig=>{setSortConfig(newSortConfig);},150),[]);const debouncedUpdateFilter=React.useCallback(debounce(newFilters=>{setFilters(newFilters);},150),[]);// Add detailed logging around transition logic\n// console.log(\n//     \"\uD83D\uDD0D Transition state before rendering\",\n//     {\n//         isTransitioning,\n//         isSettling,\n//         itemsLength: items.length,\n//         emptyStateInstanceExists:\n//             !!emptyStateInstance,\n//     }\n// )\n// Modify the child wrapper styles to include settling state\nconst getTransitionStyles=baseStyles=>({...baseStyles,opacity:isTransitioning||isSettling?0:1,transition:`opacity ${isSettling?\"0.5s\":\"0.3s\"} ease-in-out`,pointerEvents:isTransitioning||isSettling?\"none\":\"auto\"});// Render sorted items\n// console.log(\"\uD83D\uDD0D Rendering sorted items\", {\n//     sortedItemsCount: items.length,\n//     sortedItems: items,\n//     isTransitioning,\n//     isSettling,\n// })\n// Sort the filtered items\nconst sorted=[...items].sort((a,b)=>{if(sortConfig.type===\"relevancy\"){return a.originalIndex-b.originalIndex;}if(sortConfig.type===\"price\"){const result=sortConfig.sortDirection===\"highToLow\"?b.price-a.price:a.price-b.price;return result||a.originalIndex-b.originalIndex;}else if(sortConfig.type===\"name\"){// sort by name\nconst result=sortConfig.sortDirection===\"aToZ\"?a.title.localeCompare(b.title):b.title.localeCompare(a.title);return result||a.originalIndex-b.originalIndex;}else if(sortConfig.type===\"created\"){// For \"newest\", we try to use the product ID as a proxy\n// since Shopify IDs are sequential\n// Higher ID = newer product\nconst aId=parseInt(a.productId);const bId=parseInt(b.productId);if(!isNaN(aId)&&!isNaN(bId)){return bId-aId// Newest first\n;}// Fall back to original order if we can't parse IDs\nreturn a.originalIndex-b.originalIndex;}else if(sortConfig.type===\"best-selling\"){// For best-selling, maintain the original order\n// as we assume Shopify has already sorted by best-selling\nreturn a.originalIndex-b.originalIndex;}else{// Default to original order for unknown types\nreturn a.originalIndex-b.originalIndex;}});// Apply pagination if enabled\nlet paginatedItems=sorted;// console.log(\"\uD83D\uDD0D Paginated items\", {\n//     paginatedItemsCount: sorted.length,\n//     paginatedItems: sorted,\n// })\n// Update the product items wrapper with a standard list instead of virtualized one\nconst wrappedChildren=paginatedItems.map(item=>/*#__PURE__*/React.cloneElement(item.child,{style:getTransitionStyles(item.child.props.style),key:item.productId||item.originalIndex}));// console.log(\"\uD83D\uDD0D Rendering wrapped children\", {\n//     wrappedChildrenCount: wrappedChildren.length,\n//     wrappedChildren: wrappedChildren,\n// })\n// Update sorted children state which triggers re-render\nupdateSortedChildrenWithTransition(wrappedChildren);// Return the placeholder structure expected by the outer cloneElement\n// The actual content will be replaced by sortedChildren on re-render\nreturn{...originalRender,props:{...originalRender.props,// Use the original children length initially\nchildren:originalRender.props.children}};}// Initial render or while loading/filtering\nreturn{...originalRender,props:{...originalRender.props,children:sortedChildren||originalRender.props.children}};}})})});}catch(error){console.error(\"Error in ProductSort:\",error);logDebug(\"ProductSort\",\"Render error\",{error:error.message});return styledInstance;}// Update URL state management\nReact.useEffect(()=>{if(typeof window===\"undefined\")return;const url=new URL(window.location.href);// Use the updateUrlWithFilters function to update URL parameters\nupdateUrlWithFilters(filters,url);// Add search term to URL\nif(searchConfig.active&&searchConfig.term){url.searchParams.set(\"search\",searchConfig.term);}else if(url.searchParams.has(\"search\")){url.searchParams.delete(\"search\");}// Add sort configuration to URL using the simplified sort parameter\nif(sortConfig){// Map internal sort configuration to URL sort parameter\nlet sortParam;if(sortConfig.type===\"relevancy\"){sortParam=\"relevance\";}else if(sortConfig.type===\"name\"){sortParam=sortConfig.sortDirection===\"aToZ\"?\"title_asc\":\"title_desc\";}else if(sortConfig.type===\"price\"){sortParam=sortConfig.sortDirection===\"lowToHigh\"?\"price_asc\":\"price_desc\";}else if(sortConfig.type===\"created\"){sortParam=\"newest\";}else if(sortConfig.type===\"best-selling\"){sortParam=\"best_selling\";}if(sortParam){url.searchParams.set(\"sort\",sortParam);// Remove legacy sortConfig parameter if it exists\nif(url.searchParams.has(\"sortConfig\")){url.searchParams.delete(\"sortConfig\");}}else{// Fallback to the old format if we can't map to a simple parameter\nurl.searchParams.set(\"sortConfig\",JSON.stringify(sortConfig));}}// Update history state with search config\nwindow.history.pushState({filters,sortConfig,searchConfig},\"\",url.toString());},[sortConfig,filters,searchConfig]);// Update the useEffect for initializing state from URL\nReact.useEffect(()=>{if(typeof window===\"undefined\")return;const handleUrlChange=event=>{const url=new URL(window.location.href);const urlParams=new URLSearchParams(window.location.search);logDebug(\"ProductSort\",\"URL changed\",{url:url.toString(),search:url.search,eventType:event?.type||\"direct\"});// Handle search parameter\nconst searchParam=urlParams.get(\"search\");if(searchParam){setSearchConfig({term:searchParam,fields:getActiveSearchFields(props.Search?.Scope),active:true});setSortedChildren(null)// Force re-filter when search changes\n;}else if(searchConfig.active){setSearchConfig({term:\"\",fields:getActiveSearchFields(props.Search?.Scope),active:false});setSortedChildren(null)// Force re-filter when search is cleared\n;}// Log all variant parameters in URL for debugging\nconst variantParams=Array.from(urlParams.keys()).filter(key=>key.startsWith(\"variant_\")).reduce((acc,key)=>{const value=urlParams.get(key);// Decode values to see what's actually stored\nacc[key]={raw:value,decoded:value?decodeURIComponent(value):null,values:value?decodeURIComponent(value).split(\",\").filter(Boolean):[]};return acc;},{});//console.log(\"\uD83D\uDCCA VARIANT PARAMS IN URL:\", variantParams)\n// Handle sort parameter\nconst sortParam=urlParams.get(\"sort\");if(sortParam){let newSortConfig;// Map URL sort parameter to internal sort configuration\nswitch(sortParam){case\"relevance\":newSortConfig={type:\"relevancy\",sortBy:\"relevancy\",sortDirection:null};break;case\"title_asc\":newSortConfig={type:\"name\",sortBy:\"name\",sortDirection:\"aToZ\"};break;case\"title_desc\":newSortConfig={type:\"name\",sortBy:\"name\",sortDirection:\"zToA\"};break;case\"price_asc\":newSortConfig={type:\"price\",sortBy:\"price\",sortDirection:\"lowToHigh\"};break;case\"price_desc\":newSortConfig={type:\"price\",sortBy:\"price\",sortDirection:\"highToLow\"};break;case\"newest\":newSortConfig={type:\"created\",sortBy:\"created\",sortDirection:\"newest\"};break;case\"best_selling\":newSortConfig={type:\"best-selling\",sortBy:\"best-selling\",sortDirection:null};break;}if(newSortConfig){logDebug(\"ProductSort\",\"Updating sort config from URL parameter\",{sortParam,newSortConfig});setSortConfig(newSortConfig);setSortedChildren(null)// Reset sorted children to trigger resort\n;}}try{// Use parseUrlFilters to get filters from URL\nconst urlFilters=parseUrlFilters(url.searchParams);// Check if we have active filters\nconst hasActiveFilters=urlFilters&&Object.keys(urlFilters).some(key=>urlFilters[key]?.active);logDebug(\"ProductSort\",\"URL filters parsed\",{hasActiveFilters,filters:urlFilters,activeFilters:hasActiveFilters?Object.entries(urlFilters).filter(([key,filter])=>filter.active).reduce((acc,[key,filter])=>({...acc,[key]:filter}),{}):null});// Only update if we have filters in the URL\nif(hasActiveFilters){setFilters(urlFilters);setSortedChildren(null);}}catch(error){console.error(\"\u274C Error handling URL change:\",error);}};// Run initial check\nlogDebug(\"ProductSort\",\"Running initial URL check\",{url:window.location.href});handleUrlChange({})// Removed event listener for now\n;// Listen for popstate events\nwindow.addEventListener(\"popstate\",handleUrlChange);return()=>{window.removeEventListener(\"popstate\",handleUrlChange);};},[props.Search?.Scope]);// Add error state management\nconst[error,setError]=React.useState(null);// Create the content to render\nconst content=error?/*#__PURE__*/_jsx(\"div\",{style:{padding:20,color:\"red\"},children:error.message}):// Original render content with layout styling\n/*#__PURE__*/_jsx(\"div\",{...props,style:{...props.style,width:\"100%\",height:\"100%\",...(!products?.length||pageType===\"favorites\"&&!favorites?.length)&&{display:\"flex\",gridTemplateColumns:\"none\",gridAutoColumns:\"none\",gridTemplateRows:\"none\",gap:0}},children:styledInstance.props.children});// Wrap the main content in error boundary\nreturn /*#__PURE__*/_jsx(ErrorBoundary,{children:content});}addPropertyControls(FC_CatalogDisplay,{Collection:{type:ControlType.ComponentInstance,title:\"CMS Source\",description:\"Connect to CMS collection off-page\"},EmptyState:{type:ControlType.ComponentInstance,title:\"Empty State\",description:\"Connect to design off-page\"},CustomInitialState:{type:ControlType.ComponentInstance,title:\"Initial State\",description:\"Connect to design off-page\",hidden:props=>!props.Search?.enableSearch||props.Search?.initialSearchState!==\"custom\"},pageType:{type:ControlType.Enum,title:\"Display\",options:[\"default\",\"favorites\"],optionTitles:[\"All\",\"Favorites\"],defaultValue:\"default\",displaySegmentedControl:true},display:{type:ControlType.Enum,title:\"Filter Type\",options:[\"All\",\"Collection\",\"Product Tag\",\"Product Type\"],defaultValue:\"All\"},value:{type:ControlType.String,title:\"Filter Value\",placeholder:\"New Arrivals\"},defaultSort:{type:ControlType.Enum,title:\"Default Sort\",options:[\"relevance\",\"title_asc\",\"title_desc\",\"price_asc\",\"price_desc\",\"newest\",\"best_selling\"],optionTitles:[\"Relevance\",\"Title A-Z\",\"Title Z-A\",\"Price Low-High\",\"Price High-Low\",\"Newest\",\"Best Selling\"],defaultValue:\"relevance\"},Search:{type:ControlType.Object,title:\"Search\",controls:{enableSearch:{type:ControlType.Boolean,title:\"Allow\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},initialSearchState:{type:ControlType.Enum,title:\"Initial State\",options:[\"all\",\"none\",\"custom\"],optionTitles:[\"Full\",\"Empty\",\"Custom\"],defaultValue:\"all\",description:\"Use custom to display product or search suggestions. Connect your component on the main panel.\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\",hidden:props=>!props.enableSearch},Scope:{type:ControlType.Object,title:\"Scope\",hidden:props=>!props.enableSearch,controls:{title:{type:ControlType.Boolean,title:\"Title\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},productType:{type:ControlType.Boolean,title:\"Product Type\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},productTag:{type:ControlType.Boolean,title:\"Tags\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},collection:{type:ControlType.Boolean,title:\"Collections\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},vendor:{type:ControlType.Boolean,title:\"Vendor\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},variants:{type:ControlType.Boolean,title:\"Variants\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"}}}}},Metafields:{type:ControlType.Object,title:\"Metafields\",controls:{include:{type:ControlType.Boolean,title:\"Include\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Searching or filtering by Variant: Color will also check custom metafields using custom.fc_color. \\n [Learn more](https://framercommerce.com/resources/docs/components/catalog#catalog-display)\"}}},Pagination:{type:ControlType.Object,title:\"Pagination\",controls:{enable:{type:ControlType.Boolean,title:\"Enable\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"},type:{type:ControlType.Enum,title:\"Type\",options:[\"load_more\",\"next_prev\"/* \"infinite\"*/],optionTitles:[\"Load More\",\"Next/Prev\"/*\"Infinite Scroll\"*/],defaultValue:\"load_more\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\",hidden:({enable})=>!enable},items:{type:ControlType.Number,title:\"Items\",defaultValue:12,min:1,step:1,displayStepper:true,hidden:({enable})=>!enable}}},layout:{type:ControlType.Object,optional:true,controls:{type:{type:ControlType.Enum,defaultValue:\"grid\",options:[\"stack\",\"grid\"],optionTitles:[\"Stack\",\"Grid\"],displaySegmentedControl:true},// Stack specific controls\ndirection:{type:ControlType.Enum,defaultValue:\"vertical\",options:[\"horizontal\",\"vertical\"],optionTitles:[\"Horizontal\",\"Vertical\"],optionIcons:[\"direction-horizontal\",\"direction-vertical\"],displaySegmentedControl:true,hidden:props=>props.type!==\"stack\"},wrap:{type:ControlType.Boolean,defaultValue:false,title:\"Wrap\",hidden:props=>props.type!==\"stack\"},stackMinWidth:{type:ControlType.Number,defaultValue:200,min:1,max:1e3,step:1,title:\"Min Width\",hidden:props=>props.type!==\"stack\"||!props.wrap},distribute:{type:ControlType.Enum,defaultValue:\"start\",options:[\"start\",\"center\",\"end\",\"space-between\",\"space-around\",\"space-evenly\"],optionTitles:[\"Start\",\"Center\",\"End\",\"Space Between\",\"Space Around\",\"Space Evenly\"],hidden:props=>props.type!==\"stack\"},align:{type:ControlType.Enum,defaultValue:\"start\",options:[\"start\",\"center\",\"end\"],optionTitles:[\"Start\",\"Center\",\"End\"],optionIcons:[\"align-left\",\"align-center\",\"align-right\"],displaySegmentedControl:true,hidden:props=>props.type!==\"stack\"||props.direction!==\"vertical\"},alignH:{type:ControlType.Enum,defaultValue:\"start\",options:[\"start\",\"center\",\"end\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],optionIcons:[\"align-top\",\"align-middle\",\"align-bottom\"],displaySegmentedControl:true,title:\"Align\",hidden:props=>props.type!==\"stack\"||props.direction!==\"horizontal\"},// Grid specific controls\ncolumns:{type:ControlType.Enum,defaultValue:\"fixed\",options:[\"auto\",\"fixed\"],optionTitles:[\"Auto\",\"Fixed\"],displaySegmentedControl:true,hidden:props=>props.type!==\"grid\"},columnCount:{type:ControlType.Number,defaultValue:3,min:1,step:1,displayStepper:true,title:\"Columns\",hidden:props=>props.type!==\"grid\"||props.columns===\"auto\"},gridWidth:{type:ControlType.Number,defaultValue:300,min:1,max:1e3,step:1,title:\"Min Width\",hidden:props=>props.type!==\"grid\"||props.columns===\"fixed\"},maxColumns:{type:ControlType.Number,defaultValue:4,min:1,step:1,title:\"Max Col\",displayStepper:true,hidden:props=>props.type!==\"grid\"||props.columns===\"fixed\"},gridAlign:{type:ControlType.Enum,defaultValue:\"center\",options:[\"start\",\"center\",\"end\"],optionTitles:[\"Left\",\"Center\",\"Right\"],displaySegmentedControl:true,title:\"Align\",hidden:props=>props.type!==\"grid\"},// Common controls\ngap:{type:ControlType.Number,defaultValue:20,min:0,step:1,title:\"Gap\"},padding:{type:ControlType.FusedNumber,title:\"Padding\",defaultValue:0,min:0,toggleKey:\"paddingPerSide\",toggleTitles:[\"All\",\"Sides\"],valueKeys:[\"paddingTop\",\"paddingRight\",\"paddingBottom\",\"paddingLeft\"],valueLabels:[\"T\",\"R\",\"B\",\"L\"]}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FC_CatalogDisplay\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FC_CatalogDisplay.map", "// Generated by Framer (df7882f)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,cx,SVG,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import{useRef}from\"react\";const serializationHash=\"framer-oldhP\";const variantClassNames={mNwlrubOV:\"framer-v-1jx3q8t\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants?.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={bounce:.2,delay:0,duration:.4,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value??config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion.create(React.Fragment);const getProps=({height,id,width,...props})=>{return{...props};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const fallbackRef=useRef(null);const refBinding=ref??fallbackRef;const defaultLayoutId=React.useId();const{activeLocale,setLocale}=useLocaleInfo();const componentViewport=useComponentViewport();const{style,className,layoutId,variant,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({defaultVariant:\"mNwlrubOV\",ref:refBinding,variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const sharedStyleClassNames=[];const scopingClassNames=cx(serializationHash,...sharedStyleClassNames);return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId??defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsxs(motion.div,{...restProps,...gestureHandlers,className:cx(scopingClassNames,\"framer-1jx3q8t\",className,classNames),\"data-framer-name\":\"Variant 1\",layoutDependency:layoutDependency,layoutId:\"mNwlrubOV\",ref:refBinding,style:{...style},children:[/*#__PURE__*/_jsx(SVG,{className:\"framer-iijjau\",layoutDependency:layoutDependency,layoutId:\"K7GHOEfm9\",opacity:1,requiresOverflowVisible:false,svg:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 8.247 33.379\" overflow=\"visible\"><path d=\"M 6.584 21.206 C 6.614 19.2 6.984 17.213 7.677 15.329 C 7.837 14.873 8.037 14.267 8.247 13.611 C 7.865 12.402 7.519 11.267 7.364 10.656 C 7.058 9.573 6.888 8.456 6.86 7.331 C 6.86 6.866 6.722 3.063 6.701 2.477 C 6.727 2.367 6.743 2.254 6.746 2.141 L 6.746 1.455 C 6.743 1.348 6.724 1.242 6.689 1.14 L 6.689 0.874 C 6.689 0.063 5.318 0 4.898 0 C 4.478 0 3.108 0.063 3.108 0.874 L 3.108 1.142 C 3.072 1.25 3.053 1.363 3.05 1.477 L 3.05 2.159 C 3.055 2.268 3.07 2.376 3.096 2.482 C 3.085 3.058 3.004 6.883 3.004 7.345 C 2.986 8.316 2.832 9.28 2.548 10.208 C 2.507 10.359 2.468 10.509 2.431 10.658 C 2.177 11.66 1.341 14.373 0.888 15.661 C 0.324 17.186 0.024 18.795 0 20.42 L 0 31.294 C 0 32.107 0.296 32.433 0.438 32.543 C 1.17 33.16 3.294 33.379 4.9 33.379 C 5.428 33.379 6.012 33.354 6.584 33.3 Z\" fill=\"rgb(37,40,42)\"></path></svg>',withExternalLayout:true}),/*#__PURE__*/_jsx(SVG,{className:\"framer-1rtwvxu\",layoutDependency:layoutDependency,layoutId:\"e6Uv0wuKf\",opacity:1,requiresOverflowVisible:false,svg:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 8.389 33.38\" overflow=\"visible\"><path d=\"M 7.502 15.67 C 6.913 13.872 6.198 11.612 5.955 10.656 C 5.649 9.573 5.479 8.456 5.451 7.331 C 5.451 6.866 5.313 3.062 5.291 2.477 C 5.318 2.367 5.333 2.254 5.337 2.141 L 5.337 1.456 C 5.334 1.348 5.314 1.242 5.28 1.14 L 5.28 0.874 C 5.28 0.063 3.909 0 3.489 0 C 3.068 0 1.699 0.063 1.699 0.874 L 1.699 1.142 C 1.663 1.25 1.644 1.363 1.641 1.477 L 1.641 2.159 C 1.646 2.268 1.661 2.377 1.688 2.483 C 1.676 3.059 1.596 6.883 1.596 7.345 C 1.577 8.317 1.423 9.281 1.139 10.21 C 1.099 10.36 1.06 10.509 1.022 10.658 C 0.849 11.339 0.407 12.811 0 14.088 C 0.138 14.517 0.276 14.941 0.408 15.345 C 1.512 18.714 1.503 20.983 1.499 21.204 L 1.499 33.27 C 2.16 33.343 2.825 33.38 3.49 33.38 C 5.095 33.38 7.218 33.16 7.95 32.544 C 8.093 32.434 8.389 32.108 8.389 31.295 L 8.389 20.432 C 8.391 20.354 8.427 18.497 7.501 15.67\" fill=\"rgb(37,40,42)\"></path></svg>',withExternalLayout:true}),/*#__PURE__*/_jsx(SVG,{className:\"framer-jf50i6\",layoutDependency:layoutDependency,layoutId:\"PlloWoZGF\",opacity:1,requiresOverflowVisible:false,svg:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 10.717 39.198\" overflow=\"visible\"><path d=\"M 7.795 12.451 C 7.414 11.098 7.204 9.704 7.17 8.299 C 7.17 7.706 6.975 2.374 6.975 2.374 C 7.009 2.262 7.028 2.147 7.033 2.03 L 7.033 1.231 C 7.033 1.231 7.021 0.998 6.963 0.959 L 6.963 0.5 C 6.963 0.222 6.243 0 5.356 0 C 4.47 0 3.75 0.224 3.75 0.501 L 3.75 0.957 C 3.691 0.995 3.681 1.229 3.681 1.229 L 3.681 2.03 C 3.685 2.147 3.704 2.262 3.738 2.374 C 3.738 2.374 3.627 7.723 3.627 8.315 C 3.627 10.01 3.229 11.226 2.917 12.452 C 2.606 13.679 1.601 16.943 1.041 18.543 C 0.384 20.325 0.032 22.205 0 24.105 L 0 37.235 C 0 38.108 0.32 38.309 0.32 38.309 C 0.904 38.821 2.939 39.198 5.358 39.198 C 7.778 39.198 9.814 38.82 10.397 38.31 C 10.397 38.31 10.717 38.109 10.717 37.236 L 10.717 24.105 C 10.717 24.105 10.774 21.904 9.672 18.541 C 9.029 16.576 8.106 13.677 7.795 12.451\" fill=\"rgb(37,40,42)\"></path></svg>',withExternalLayout:true}),/*#__PURE__*/_jsx(SVG,{className:\"framer-1p57dfd\",layoutDependency:layoutDependency,layoutId:\"KDvZ2cD00\",opacity:1,requiresOverflowVisible:false,svg:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 10.717 39.198\" overflow=\"visible\"><path d=\"M 7.795 12.451 C 7.414 11.098 7.204 9.704 7.17 8.299 C 7.17 7.706 6.975 2.374 6.975 2.374 C 7.009 2.262 7.028 2.147 7.033 2.03 L 7.033 1.231 C 7.033 1.231 7.021 0.998 6.963 0.959 L 6.963 0.5 C 6.963 0.222 6.243 0 5.356 0 C 4.47 0 3.75 0.224 3.75 0.501 L 3.75 0.957 C 3.691 0.995 3.681 1.229 3.681 1.229 L 3.681 2.03 C 3.685 2.147 3.704 2.262 3.738 2.374 C 3.738 2.374 3.627 7.723 3.627 8.315 C 3.627 10.01 3.229 11.226 2.917 12.452 C 2.606 13.679 1.601 16.943 1.041 18.543 C 0.384 20.325 0.032 22.205 0 24.105 L 0 37.235 C 0 38.108 0.32 38.309 0.32 38.309 C 0.904 38.821 2.939 39.198 5.358 39.198 C 7.778 39.198 9.814 38.82 10.397 38.31 C 10.397 38.31 10.717 38.109 10.717 37.236 L 10.717 24.105 C 10.717 24.105 10.774 21.904 9.672 18.541 C 9.029 16.576 8.106 13.677 7.795 12.451\" fill=\"rgb(37,40,42)\"></path></svg>',withExternalLayout:true})]})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-oldhP.framer-jj8tmg, .framer-oldhP .framer-jj8tmg { display: block; }\",\".framer-oldhP.framer-1jx3q8t { height: 45px; overflow: hidden; position: relative; width: 45px; }\",\".framer-oldhP .framer-iijjau { height: 34px; left: 10px; position: absolute; top: 6px; width: 8px; }\",\".framer-oldhP .framer-1rtwvxu { height: 34px; left: 28px; position: absolute; top: 6px; width: 9px; }\",\".framer-oldhP .framer-jf50i6, .framer-oldhP .framer-1p57dfd { height: 39px; left: 18px; position: absolute; top: 3px; width: 11px; }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 45\n * @framerIntrinsicWidth 45\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"fixed\"]}}}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerAutoSizeImages true\n * @framerComponentViewportWidth true\n * @framerColorSyntax true\n */const Framerhd2gbXUgi=withCSS(Component,css,\"framer-oldhP\");export default Framerhd2gbXUgi;Framerhd2gbXUgi.displayName=\"Bottle Button\";Framerhd2gbXUgi.defaultProps={height:45,width:45};addFonts(Framerhd2gbXUgi,[{explicitInter:true,fonts:[]}],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"Framerhd2gbXUgi\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"45\",\"framerImmutableVariables\":\"true\",\"framerIntrinsicWidth\":\"45\",\"framerColorSyntax\":\"true\",\"framerContractVersion\":\"1\",\"framerAutoSizeImages\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]}}}\",\"framerComponentViewportWidth\":\"true\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./hd2gbXUgi.map"],
  "mappings": "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",
  "names": ["convertFilterName", "name", "toLegacy", "mappings", "reverseMappings", "key", "value", "parseUrlFilters", "urlParams", "filters", "filterType", "normalizedType", "values", "variantName", "decodedValue", "val", "priceRanges", "priceMax", "priceMin", "ranges", "range", "min", "max", "underRanges", "discountAmount", "discountAmountMin", "minValues", "discountPercent", "discountPercentMin", "updateUrlWithFilters", "url", "variantGroups", "variant", "normalizeName", "v", "regularRanges", "underMaxValues", "overMinValues", "discountRanges", "discountMinValues", "discountPercentRanges", "discountPercentMinValues", "DEBUG_MODE", "globalFilterState", "listener", "event", "window", "logDebug", "component", "action", "data", "FC_CatalogFilterButton", "props", "filterType", "property", "displayText", "value", "priceType", "priceThreshold", "priceOver", "priceLow", "priceHigh", "discountType", "discountValueType", "discountThreshold", "discountLow", "discountHigh", "variantTitle", "variantValue", "showVariantTitle", "showVariantValue", "variantStockFilter", "variantDisplayText", "showText", "cmsTitle", "cmsValue", "font", "type", "width", "height", "radius", "radiusPerSide", "radiusTopLeft", "radiusTopRight", "radiusBottomRight", "radiusBottomLeft", "swatchType", "swatchImage", "swatchColor", "swatchBorder", "iconType", "iconColor", "iconWeight", "iconEdge", "iconSize", "customIcon", "gap", "padding", "paddingPerSide", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft", "direction", "defaultState", "hoverState", "selectedState", "componentId", "pe", "componentRef", "mountedRef", "isHovered", "setIsHovered", "ye", "isChecked", "setIsChecked", "isCheckedRef", "normalizedProperty", "se", "getFilterValueForComponent", "te", "normalizedProp", "values", "error", "checkUrlState", "window", "url", "filterValue", "logDebug", "f", "e", "parsedFilters", "parseUrlFilters", "normalized", "convertFilterName", "v", "range", "urlRanges", "currentRange", "discountProperty", "dispatchFilterChange", "active", "filters", "cmsFilters", "filteredCmsFilters", "urlKey", "existingValuesStr", "existingValues", "updatedValues", "maxValues", "index", "minValues", "ranges", "regularRanges", "min", "max", "underMaxValues", "newRange", "rangeToRemove", "updateUrlWithFilters", "eventType", "navigationEvent", "dispatchEventType", "dispatchValue", "urlValue", "legacyEvent", "ue", "handleUrlChange", "event", "isBackButton", "isFilterChanged", "eventSource", "currentUrl", "newState", "currentState", "handlePopState", "handleChange", "globalFilterState", "events", "filterProperty", "eventProperty", "myFilterValue", "name", "handler", "handleKeyDown", "getDisplayText", "unit", "getRadiusStyle", "getBorderStyle", "borderConfig", "getHoverBorderStyle", "getSelectedBorderStyle", "containerStyle", "state", "textStyle", "checkboxStyle", "renderIcon", "showPreview", "RenderTarget", "p", "lineCap", "lineJoin", "strokeWidth", "renderSwatch", "containerRadius", "borderTop", "borderRight", "borderBottom", "borderLeft", "totalBorderWidth", "totalBorderHeight", "totalSpace", "innerWidth", "innerHeight", "innerRadius", "containerBorderStyle", "color", "colorName", "colorMapping", "c", "u", "addPropertyControls", "ControlType", "swatchColorType", "_define_property", "obj", "key", "value", "globalSortState", "listener", "event", "window", "findDeep13DigitNumber", "match", "found", "ErrorBoundary", "I", "error", "errorInfo", "p", "props", "logDebug", "component", "action", "data", "getActiveSearchFields", "scope", "fields", "FC_CatalogDisplay", "isLoading", "setIsLoading", "ye", "sortedChildren", "setSortedChildren", "products", "setProducts", "favorites", "setFavorites", "isTransitioning", "setIsTransitioning", "isSettling", "setIsSettling", "Collection", "pageType", "Metafields", "includeMetafields", "transitionTimeoutRef", "pe", "settlingTimeoutRef", "lastUpdateRef", "urlParams", "currentPage", "setCurrentPage", "pageParam", "hasMore", "setHasMore", "observerRef", "loadMoreRef", "itemsPerPage", "allProducts", "setAllProducts", "displayedProducts", "setDisplayedProducts", "searchConfig", "setSearchConfig", "searchParam", "ue", "prev", "hasMoreItemsEvent", "updateNextPrevButtonsEvent", "getPaginatedProducts", "te", "startIndex", "endIndex", "paginatedProducts", "hasMoreLoadMore", "hasMoreNextPrev", "hasMoreInfinite", "url", "newUrl", "observer", "entries", "target", "updateSortedChildrenWithTransition", "newChildren", "paginatedChildren", "now", "performTransition", "sortConfig", "setSortConfig", "sortParam", "storedSort", "filters", "setFilters", "initialFilters", "filter", "acc", "urlFilters", "parseUrlFilters", "activeFilters", "mergedFilters", "handleProductsReady", "e", "handleSortChange", "handleFilterReset", "resetFilters", "handleFilter", "type", "active", "newFilters", "group", "filterType", "variantStockFilter", "variantName", "valueToProcess", "val", "v", "variantValues", "nameMatches", "valueMatches", "newRange", "formattedRange", "range", "valueRange", "currentRange", "discountType", "handleSearch", "loadFavorites", "storedFavorites", "handleFavoritesUpdate", "newFavorites", "productId", "updatedFavorites", "id", "updatedChildren", "child", "handleProductsReadyEvent", "customEvent", "handleSortChangeEvent", "handleFilterResetEvent", "handleFilterChangeEvent", "handleSearchChangeEvent", "filterValues", "matchingProducts", "productType", "filterValue", "getProductDetails", "fullId", "product", "node", "c", "edge", "productMatchesFilters", "filterResults", "searchTerm", "matches", "field", "variantMatches", "option", "metafieldMatches", "mf", "values", "parsed", "titleMatches", "typeMatches", "tagMatches", "tag", "collectionMatches", "collection", "collectionTitle", "vendorMatches", "collectionValues", "productCollections", "collectionValue", "productTypeValues", "tagValues", "tagValue", "productPrice", "compareAtPrice", "discountAmount", "discountPercent", "comparePrice", "price", "variantFilters", "variant", "shouldCheckStock", "isAvailable", "variantFiltersByName", "name", "matchingOption", "metafieldKey", "metafield", "shouldShowCustomInitial", "searchResultsEvent", "hasShopXTools", "collectionInstance", "emptyStateInstance", "sizedInstance", "q", "layoutStyle", "layout", "isVertical", "gridTemplateColumns", "styledInstance", "RenderTarget", "isBackNavigation", "setIsBackNavigation", "handleUrlChange", "newPage", "originalRender", "styledCustomInitial", "CustomInitialWrapper", "filteredShopXProducts", "filteredForPage", "styledEmptyState", "EmptyStateWrapper", "items", "item", "collectionItem", "matchingProduct", "details", "OptimizedChild", "X", "debouncedUpdateSort", "debounce_default", "newSortConfig", "debouncedUpdateFilter", "getTransitionStyles", "baseStyles", "wrappedChildren", "a", "b", "aId", "bId", "updateUrlWithFilters", "variantParams", "hasActiveFilters", "setError", "content", "addPropertyControls", "ControlType", "enable", "serializationHash", "variantClassNames", "transition1", "Transition", "value", "children", "config", "re", "MotionConfigContext", "transition", "contextValue", "se", "p", "Variants", "motion", "x", "getProps", "height", "id", "width", "props", "createLayoutDependency", "variants", "Component", "Y", "ref", "fallbackRef", "pe", "refBinding", "defaultLayoutId", "ae", "activeLocale", "setLocale", "useLocaleInfo", "componentViewport", "useComponentViewport", "style", "className", "layoutId", "variant", "restProps", "baseVariant", "classNames", "clearLoadingGesture", "gestureHandlers", "gestureVariant", "isLoading", "setGestureState", "setVariant", "useVariantState", "variantClassNames", "layoutDependency", "scopingClassNames", "cx", "serializationHash", "LayoutGroup", "u", "SVG", "css", "Framerhd2gbXUgi", "withCSS", "hd2gbXUgi_default", "addFonts"]
}
